{
 "cells": [
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "# Quickstart"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "To start working with Kotlin DataFrame in a notebook, run the cell with the next code:"
  },
  {
   "cell_type": "code",
   "metadata": {
    "collapsed": true,
    "ExecuteTime": {
     "end_time": "2025-05-01T13:42:31.795685Z",
     "start_time": "2025-05-01T13:42:24.748992Z"
    }
   },
   "source": [
    "%useLatestDescriptors\n",
    "%use dataframe"
   ],
   "outputs": [],
   "execution_count": 1
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "This will load all necessary DataFrame dependencies (of the latest stable version) and all imports, as well as DataFrame rendering. Learn more here"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "## Read DataFrame"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "Kotlin DataFrame supports all popular data formats, including CSV, JSON and Excel, as well as reading from various databases. Read a CSV with the \"Jetbrains Repositories\" dataset into `df` variable:"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-01T13:42:32.441575Z",
     "start_time": "2025-05-01T13:42:31.823137Z"
    }
   },
   "cell_type": "code",
   "source": [
    "val df = DataFrame.readCsv(\n",
    "    \"https://raw.githubusercontent.com/Kotlin/dataframe/master/data/jetbrains_repositories.csv\"\n",
    ")"
   ],
   "outputs": [],
   "execution_count": 2
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "## Display And Explore"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "To display your dataframe as a cell output, place it in the last line of the cell:"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-01T13:42:32.538828Z",
     "start_time": "2025-05-01T13:42:32.465804Z"
    }
   },
   "cell_type": "code",
   "source": "df",
   "outputs": [
    {
     "data": {
      "text/html": [
       "            <iframe onload=\"o_resize_iframe_out_1()\" style=\"width:100%;\" class=\"result_container\" id=\"iframe_out_1\" frameBorder=\"0\" srcdoc=\"        &lt;html theme='dark'&gt;\n",
       "        &lt;head&gt;\n",
       "            &lt;style type=&quot;text&sol;css&quot;&gt;\n",
       "                :root {\n",
       "    --background: #fff;\n",
       "    --background-odd: #f5f5f5;\n",
       "    --background-hover: #d9edfd;\n",
       "    --header-text-color: #474747;\n",
       "    --text-color: #848484;\n",
       "    --text-color-dark: #000;\n",
       "    --text-color-medium: #737373;\n",
       "    --text-color-pale: #b3b3b3;\n",
       "    --inner-border-color: #aaa;\n",
       "    --bold-border-color: #000;\n",
       "    --link-color: #296eaa;\n",
       "    --link-color-pale: #296eaa;\n",
       "    --link-hover: #1a466c;\n",
       "}\n",
       "\n",
       ":root[theme=&quot;dark&quot;], :root [data-jp-theme-light=&quot;false&quot;], .dataframe_dark{\n",
       "    --background: #303030;\n",
       "    --background-odd: #3c3c3c;\n",
       "    --background-hover: #464646;\n",
       "    --header-text-color: #dddddd;\n",
       "    --text-color: #b3b3b3;\n",
       "    --text-color-dark: #dddddd;\n",
       "    --text-color-medium: #b2b2b2;\n",
       "    --text-color-pale: #737373;\n",
       "    --inner-border-color: #707070;\n",
       "    --bold-border-color: #777777;\n",
       "    --link-color: #008dc0;\n",
       "    --link-color-pale: #97e1fb;\n",
       "    --link-hover: #00688e;\n",
       "}\n",
       "\n",
       "p.dataframe_description {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe {\n",
       "    font-family: &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif;\n",
       "    font-size: 12px;\n",
       "    background-color: var(--background);\n",
       "    color: var(--text-color-dark);\n",
       "    border: none;\n",
       "    border-collapse: collapse;\n",
       "}\n",
       "\n",
       "table.dataframe th, td {\n",
       "    padding: 6px;\n",
       "    border: 1px solid transparent;\n",
       "    text-align: left;\n",
       "}\n",
       "\n",
       "table.dataframe th {\n",
       "    background-color: var(--background);\n",
       "    color: var(--header-text-color);\n",
       "}\n",
       "\n",
       "table.dataframe td {\n",
       "    vertical-align: top;\n",
       "    white-space: nowrap;\n",
       "}\n",
       "\n",
       "table.dataframe th.bottomBorder {\n",
       "    border-bottom-color: var(--bold-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe tbody &gt; tr:nth-child(odd) {\n",
       "    background: var(--background-odd);\n",
       "}\n",
       "\n",
       "table.dataframe tbody &gt; tr:nth-child(even) {\n",
       "    background: var(--background);\n",
       "}\n",
       "\n",
       "table.dataframe tbody &gt; tr:hover {\n",
       "    background: var(--background-hover);\n",
       "}\n",
       "\n",
       "table.dataframe a {\n",
       "    cursor: pointer;\n",
       "    color: var(--link-color);\n",
       "    text-decoration: none;\n",
       "}\n",
       "\n",
       "table.dataframe tr:hover &gt; td a {\n",
       "    color: var(--link-color-pale);\n",
       "}\n",
       "\n",
       "table.dataframe a:hover {\n",
       "    color: var(--link-hover);\n",
       "    text-decoration: underline;\n",
       "}\n",
       "\n",
       "table.dataframe img {\n",
       "    max-width: fit-content;\n",
       "}\n",
       "\n",
       "table.dataframe th.complex {\n",
       "    background-color: var(--background);\n",
       "    border: 1px solid var(--background);\n",
       "}\n",
       "\n",
       "table.dataframe .leftBorder {\n",
       "    border-left-color: var(--inner-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe .rightBorder {\n",
       "    border-right-color: var(--inner-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe .rightAlign {\n",
       "    text-align: right;\n",
       "}\n",
       "\n",
       "table.dataframe .expanderSvg {\n",
       "    width: 8px;\n",
       "    height: 8px;\n",
       "    margin-right: 3px;\n",
       "}\n",
       "\n",
       "table.dataframe .expander {\n",
       "    display: flex;\n",
       "    align-items: center;\n",
       "}\n",
       "\n",
       "&sol;* formatting *&sol;\n",
       "\n",
       "table.dataframe .null {\n",
       "    color: var(--text-color-pale);\n",
       "}\n",
       "\n",
       "table.dataframe .structural {\n",
       "    color: var(--text-color-medium);\n",
       "    font-weight: bold;\n",
       "}\n",
       "\n",
       "table.dataframe .dataFrameCaption {\n",
       "    font-weight: bold;\n",
       "}\n",
       "\n",
       "table.dataframe .numbers {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe td:hover .formatted .structural, .null {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe tr:hover .formatted .structural, .null {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "\n",
       ":root {\n",
       "    --scroll-bg: #f5f5f5;\n",
       "    --scroll-fg: #b3b3b3;\n",
       "}\n",
       ":root[theme=&quot;dark&quot;], :root [data-jp-theme-light=&quot;false&quot;]{\n",
       "    --scroll-bg: #3c3c3c;\n",
       "    --scroll-fg: #97e1fb;\n",
       "}\n",
       "body {\n",
       "    scrollbar-color: var(--scroll-fg) var(--scroll-bg);\n",
       "}\n",
       "body::-webkit-scrollbar {\n",
       "    width: 10px; &sol;* Mostly for vertical scrollbars *&sol;\n",
       "    height: 10px; &sol;* Mostly for horizontal scrollbars *&sol;\n",
       "}\n",
       "body::-webkit-scrollbar-thumb {\n",
       "    background-color: var(--scroll-fg);\n",
       "}\n",
       "body::-webkit-scrollbar-track {\n",
       "    background-color: var(--scroll-bg);\n",
       "}\n",
       "            &lt;&sol;style&gt;\n",
       "        &lt;&sol;head&gt;\n",
       "        &lt;body&gt;\n",
       "            &lt;table class=&quot;dataframe&quot; id=&quot;df_536870912&quot;&gt;&lt;&sol;table&gt;\n",
       "\n",
       "&lt;p class=&quot;dataframe_description&quot;&gt;... showing only top 20 of 562 rows&lt;&sol;p&gt;&lt;p class=&quot;dataframe_description&quot;&gt;DataFrame: rowsCount = 562, columnsCount = 5&lt;&sol;p&gt;\n",
       "\n",
       "        &lt;&sol;body&gt;\n",
       "        &lt;script&gt;\n",
       "            (function () {\n",
       "    window.DataFrame = window.DataFrame || new (function () {\n",
       "        this.addTable = function (df) {\n",
       "            let cols = df.cols;\n",
       "            for (let i = 0; i &lt; cols.length; i++) {\n",
       "                for (let c of cols[i].children) {\n",
       "                    cols[c].parent = i;\n",
       "                }\n",
       "            }\n",
       "            df.nrow = 0\n",
       "            for (let i = 0; i &lt; df.cols.length; i++) {\n",
       "                if (df.cols[i].values.length &gt; df.nrow) df.nrow = df.cols[i].values.length\n",
       "            }\n",
       "            if (df.id === df.rootId) {\n",
       "                df.expandedFrames = new Set()\n",
       "                df.childFrames = {}\n",
       "                const table = this.getTableElement(df.id)\n",
       "                table.df = df\n",
       "                for (let i = 0; i &lt; df.cols.length; i++) {\n",
       "                    let col = df.cols[i]\n",
       "                    if (col.parent === undefined &amp;&amp; col.children.length &gt; 0) col.expanded = true\n",
       "                }\n",
       "            } else {\n",
       "                const rootDf = this.getTableData(df.rootId)\n",
       "                rootDf.childFrames[df.id] = df\n",
       "            }\n",
       "        }\n",
       "\n",
       "        this.computeRenderData = function (df) {\n",
       "            let result = []\n",
       "            let pos = 0\n",
       "            for (let col = 0; col &lt; df.cols.length; col++) {\n",
       "                if (df.cols[col].parent === undefined)\n",
       "                    pos += this.computeRenderDataRec(df.cols, col, pos, 0, result, false, false)\n",
       "            }\n",
       "            for (let i = 0; i &lt; result.length; i++) {\n",
       "                let row = result[i]\n",
       "                for (let j = 0; j &lt; row.length; j++) {\n",
       "                    let cell = row[j]\n",
       "                    if (j === 0)\n",
       "                        cell.leftBd = false\n",
       "                    if (j &lt; row.length - 1) {\n",
       "                        let nextData = row[j + 1]\n",
       "                        if (nextData.leftBd) cell.rightBd = true\n",
       "                        else if (cell.rightBd) nextData.leftBd = true\n",
       "                    } else cell.rightBd = false\n",
       "                }\n",
       "            }\n",
       "            return result\n",
       "        }\n",
       "\n",
       "        this.computeRenderDataRec = function (cols, colId, pos, depth, result, leftBorder, rightBorder) {\n",
       "            if (result.length === depth) {\n",
       "                const array = [];\n",
       "                if (pos &gt; 0) {\n",
       "                    let j = 0\n",
       "                    for (let i = 0; j &lt; pos; i++) {\n",
       "                        let c = result[depth - 1][i]\n",
       "                        j += c.span\n",
       "                        let copy = Object.assign({empty: true}, c)\n",
       "                        array.push(copy)\n",
       "                    }\n",
       "                }\n",
       "                result.push(array)\n",
       "            }\n",
       "            const col = cols[colId];\n",
       "            let size = 0;\n",
       "            if (col.expanded) {\n",
       "                let childPos = pos\n",
       "                for (let i = 0; i &lt; col.children.length; i++) {\n",
       "                    let child = col.children[i]\n",
       "                    let childLeft = i === 0 &amp;&amp; (col.children.length &gt; 1 || leftBorder)\n",
       "                    let childRight = i === col.children.length - 1 &amp;&amp; (col.children.length &gt; 1 || rightBorder)\n",
       "                    let childSize = this.computeRenderDataRec(cols, child, childPos, depth + 1, result, childLeft, childRight)\n",
       "                    childPos += childSize\n",
       "                    size += childSize\n",
       "                }\n",
       "            } else {\n",
       "                for (let i = depth + 1; i &lt; result.length; i++)\n",
       "                    result[i].push({id: colId, span: 1, leftBd: leftBorder, rightBd: rightBorder, empty: true})\n",
       "                size = 1\n",
       "            }\n",
       "            let left = leftBorder\n",
       "            let right = rightBorder\n",
       "            if (size &gt; 1) {\n",
       "                left = true\n",
       "                right = true\n",
       "            }\n",
       "            result[depth].push({id: colId, span: size, leftBd: left, rightBd: right})\n",
       "            return size\n",
       "        }\n",
       "\n",
       "        this.getTableElement = function (id) {\n",
       "            return document.getElementById(&quot;df_&quot; + id)\n",
       "        }\n",
       "\n",
       "        this.getTableData = function (id) {\n",
       "            return this.getTableElement(id).df\n",
       "        }\n",
       "\n",
       "        this.createExpander = function (isExpanded) {\n",
       "            const svgNs = &quot;http:&sol;&sol;www.w3.org&sol;2000&sol;svg&quot;\n",
       "            let svg = document.createElementNS(svgNs, &quot;svg&quot;)\n",
       "            svg.classList.add(&quot;expanderSvg&quot;)\n",
       "            let path = document.createElementNS(svgNs, &quot;path&quot;)\n",
       "            if (isExpanded) {\n",
       "                svg.setAttribute(&quot;viewBox&quot;, &quot;0 -2 8 8&quot;)\n",
       "                path.setAttribute(&quot;d&quot;, &quot;M1 0 l-1 1 4 4 4 -4 -1 -1 -3 3Z&quot;)\n",
       "            } else {\n",
       "                svg.setAttribute(&quot;viewBox&quot;, &quot;-2 0 8 8&quot;)\n",
       "                path.setAttribute(&quot;d&quot;, &quot;M1 0 l-1 1 3 3 -3 3 1 1 4 -4Z&quot;)\n",
       "            }\n",
       "            path.setAttribute(&quot;fill&quot;, &quot;currentColor&quot;)\n",
       "            svg.appendChild(path)\n",
       "            return svg\n",
       "        }\n",
       "\n",
       "        this.renderTable = function (id) {\n",
       "\n",
       "            let table = this.getTableElement(id)\n",
       "\n",
       "            if (table === null) return\n",
       "\n",
       "            table.innerHTML = &quot;&quot;\n",
       "\n",
       "            let df = table.df\n",
       "            let rootDf = df.rootId === df.id ? df : this.getTableData(df.rootId)\n",
       "\n",
       "            &sol;&sol; header\n",
       "            let header = document.createElement(&quot;thead&quot;)\n",
       "            table.appendChild(header)\n",
       "\n",
       "            let renderData = this.computeRenderData(df)\n",
       "            for (let j = 0; j &lt; renderData.length; j++) {\n",
       "                let rowData = renderData[j]\n",
       "                let tr = document.createElement(&quot;tr&quot;);\n",
       "                let isLastRow = j === renderData.length - 1\n",
       "                header.appendChild(tr);\n",
       "                for (let i = 0; i &lt; rowData.length; i++) {\n",
       "                    let cell = rowData[i]\n",
       "                    let th = document.createElement(&quot;th&quot;);\n",
       "                    th.setAttribute(&quot;colspan&quot;, cell.span)\n",
       "                    let colId = cell.id\n",
       "                    let col = df.cols[colId];\n",
       "                    if (!cell.empty) {\n",
       "                        if (col.children.length === 0) {\n",
       "                            th.innerHTML = col.name\n",
       "                        } else {\n",
       "                            let link = document.createElement(&quot;a&quot;)\n",
       "                            link.className = &quot;expander&quot;\n",
       "                            let that = this\n",
       "                            link.onclick = function () {\n",
       "                                col.expanded = !col.expanded\n",
       "                                that.renderTable(id)\n",
       "                            }\n",
       "                            link.appendChild(this.createExpander(col.expanded))\n",
       "                            link.innerHTML += col.name\n",
       "                            th.appendChild(link)\n",
       "                        }\n",
       "                    }\n",
       "                    let classes = (cell.leftBd ? &quot; leftBorder&quot; : &quot;&quot;) + (cell.rightBd ? &quot; rightBorder&quot; : &quot;&quot;)\n",
       "                    if (col.rightAlign)\n",
       "                        classes += &quot; rightAlign&quot;\n",
       "                    if (isLastRow)\n",
       "                        classes += &quot; bottomBorder&quot;\n",
       "                    if (classes.length &gt; 0)\n",
       "                        th.setAttribute(&quot;class&quot;, classes)\n",
       "                    tr.appendChild(th)\n",
       "                }\n",
       "            }\n",
       "\n",
       "            &sol;&sol; body\n",
       "            let body = document.createElement(&quot;tbody&quot;)\n",
       "            table.appendChild(body)\n",
       "\n",
       "            let columns = renderData.pop()\n",
       "            for (let row = 0; row &lt; df.nrow; row++) {\n",
       "                let tr = document.createElement(&quot;tr&quot;);\n",
       "                body.appendChild(tr)\n",
       "                for (let i = 0; i &lt; columns.length; i++) {\n",
       "                    let cell = columns[i]\n",
       "                    let td = document.createElement(&quot;td&quot;);\n",
       "                    let colId = cell.id\n",
       "                    let col = df.cols[colId]\n",
       "                    let classes = (cell.leftBd ? &quot; leftBorder&quot; : &quot;&quot;) + (cell.rightBd ? &quot; rightBorder&quot; : &quot;&quot;)\n",
       "                    if (col.rightAlign)\n",
       "                        classes += &quot; rightAlign&quot;\n",
       "                    if (classes.length &gt; 0)\n",
       "                        td.setAttribute(&quot;class&quot;, classes)\n",
       "                    tr.appendChild(td)\n",
       "                    let value = col.values[row]\n",
       "                    if (value.frameId !== undefined) {\n",
       "                        let frameId = value.frameId\n",
       "                        let expanded = rootDf.expandedFrames.has(frameId)\n",
       "                        let link = document.createElement(&quot;a&quot;)\n",
       "                        link.className = &quot;expander&quot;\n",
       "                        let that = this\n",
       "                        link.onclick = function () {\n",
       "                            if (rootDf.expandedFrames.has(frameId))\n",
       "                                rootDf.expandedFrames.delete(frameId)\n",
       "                            else rootDf.expandedFrames.add(frameId)\n",
       "                            that.renderTable(id)\n",
       "                        }\n",
       "                        link.appendChild(this.createExpander(expanded))\n",
       "                        link.innerHTML += value.value\n",
       "                        if (expanded) {\n",
       "                            td.appendChild(link)\n",
       "                            td.appendChild(document.createElement(&quot;p&quot;))\n",
       "                            const childTable = document.createElement(&quot;table&quot;)\n",
       "                            childTable.className = &quot;dataframe&quot;\n",
       "                            childTable.id = &quot;df_&quot; + frameId\n",
       "                            let childDf = rootDf.childFrames[frameId]\n",
       "                            childTable.df = childDf\n",
       "                            td.appendChild(childTable)\n",
       "                            this.renderTable(frameId)\n",
       "                            if (childDf.nrow !== childDf.totalRows) {\n",
       "                                const footer = document.createElement(&quot;p&quot;)\n",
       "                                footer.innerText = `... showing only top ${childDf.nrow} of ${childDf.totalRows} rows`\n",
       "                                td.appendChild(footer)\n",
       "                            }\n",
       "                        } else {\n",
       "                            td.appendChild(link)\n",
       "                        }\n",
       "                    } else if (value.style !== undefined) {\n",
       "                        td.innerHTML = value.value\n",
       "                        td.setAttribute(&quot;style&quot;, value.style)\n",
       "                    } else td.innerHTML = value\n",
       "                    this.nodeScriptReplace(td)\n",
       "                }\n",
       "            }\n",
       "        }\n",
       "\n",
       "        this.nodeScriptReplace = function (node) {\n",
       "            if (this.nodeScriptIs(node) === true) {\n",
       "                node.parentNode.replaceChild(this.nodeScriptClone(node), node);\n",
       "            } else {\n",
       "                let i = -1, children = node.childNodes;\n",
       "                while (++i &lt; children.length) {\n",
       "                    this.nodeScriptReplace(children[i]);\n",
       "                }\n",
       "            }\n",
       "\n",
       "            return node;\n",
       "        }\n",
       "\n",
       "        this.nodeScriptClone = function (node) {\n",
       "            let script = document.createElement(&quot;script&quot;);\n",
       "            script.text = node.innerHTML;\n",
       "\n",
       "            let i = -1, attrs = node.attributes, attr;\n",
       "            while (++i &lt; attrs.length) {\n",
       "                script.setAttribute((attr = attrs[i]).name, attr.value);\n",
       "            }\n",
       "            return script;\n",
       "        }\n",
       "\n",
       "        this.nodeScriptIs = function (node) {\n",
       "            return node.tagName === 'SCRIPT';\n",
       "        }\n",
       "    })()\n",
       "\n",
       "    window.call_DataFrame = function (f) {\n",
       "        return f();\n",
       "    };\n",
       "\n",
       "    let funQueue = window[&quot;kotlinQueues&quot;] &amp;&amp; window[&quot;kotlinQueues&quot;][&quot;DataFrame&quot;];\n",
       "    if (funQueue) {\n",
       "        funQueue.forEach(function (f) {\n",
       "            f();\n",
       "        });\n",
       "        funQueue = [];\n",
       "    }\n",
       "})()\n",
       "\n",
       "&sol;*&lt;!--*&sol;\n",
       "call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: &quot;&lt;span title=&bsol;&quot;full_name: String&bsol;&quot;&gt;full_name&lt;&sol;span&gt;&quot;, children: [], rightAlign: false, values: [&quot;JetBrains&sol;JPS&quot;,&quot;JetBrains&sol;YouTrackSharp&quot;,&quot;JetBrains&sol;colorSchemeTool&quot;,&quot;JetBrains&sol;ideavim&quot;,&quot;JetBrains&sol;youtrack-vcs-hooks&quot;,&quot;JetBrains&sol;youtrack-rest-ruby-library&quot;,&quot;JetBrains&sol;emacs4ij&quot;,&quot;JetBrains&sol;codereview4intellij&quot;,&quot;JetBrains&sol;teamcity-nuget-support&quot;,&quot;JetBrains&sol;Grammar-Kit&quot;,&quot;JetBrains&sol;intellij-starteam-plugin&quot;,&quot;JetBrains&sol;la-clojure&quot;,&quot;JetBrains&sol;MPS&quot;,&quot;JetBrains&sol;intellij-community&quot;,&quot;JetBrains&sol;TeamCity.ServiceMessages&quot;,&quot;JetBrains&sol;youtrack-rest-python-library&quot;,&quot;JetBrains&sol;intellij-scala&quot;,&quot;JetBrains&sol;teamcity-messages&quot;,&quot;JetBrains&sol;teamcity-cpp&quot;,&quot;JetBrains&sol;kotlin&quot;] }, \n",
       "{ name: &quot;&lt;span title=&bsol;&quot;html_url: URL&bsol;&quot;&gt;html_url&lt;&sol;span&gt;&quot;, children: [], rightAlign: false, values: [&quot;&lt;a href='https:&sol;&sol;github.com&sol;JetBrains&sol;JPS' target='_blank'&gt;https:&sol;&sol;github.com&sol;JetBrains&sol;JPS&lt;&sol;a&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;https:&sol;&sol;github.com&sol;JetBrains&sol;YouTrackSharp&bsol;&quot;&gt;&lt;a href='https:&sol;&sol;github.com&sol;JetBrains&sol;YouTrackSharp' target='_blank'&gt;https:&sol;&sol;github.com&sol;JetBrains&sol;YouTrack&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;&sol;a&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;https:&sol;&sol;github.com&sol;JetBrains&sol;colorSchemeTool&bsol;&quot;&gt;&lt;a href='https:&sol;&sol;github.com&sol;JetBrains&sol;colorSchemeTool' target='_blank'&gt;https:&sol;&sol;github.com&sol;JetBrains&sol;colorSch&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;&sol;a&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;a href='https:&sol;&sol;github.com&sol;JetBrains&sol;ideavim' target='_blank'&gt;https:&sol;&sol;github.com&sol;JetBrains&sol;ideavim&lt;&sol;a&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;https:&sol;&sol;github.com&sol;JetBrains&sol;youtrack-vcs-hooks&bsol;&quot;&gt;&lt;a href='https:&sol;&sol;github.com&sol;JetBrains&sol;youtrack-vcs-hooks' target='_blank'&gt;https:&sol;&sol;github.com&sol;JetBrains&sol;youtrack&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;&sol;a&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;https:&sol;&sol;github.com&sol;JetBrains&sol;youtrack-rest-ruby-library&bsol;&quot;&gt;&lt;a href='https:&sol;&sol;github.com&sol;JetBrains&sol;youtrack-rest-ruby-library' target='_blank'&gt;https:&sol;&sol;github.com&sol;JetBrains&sol;youtrack&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;&sol;a&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;a href='https:&sol;&sol;github.com&sol;JetBrains&sol;emacs4ij' target='_blank'&gt;https:&sol;&sol;github.com&sol;JetBrains&sol;emacs4ij&lt;&sol;a&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;https:&sol;&sol;github.com&sol;JetBrains&sol;codereview4intellij&bsol;&quot;&gt;&lt;a href='https:&sol;&sol;github.com&sol;JetBrains&sol;codereview4intellij' target='_blank'&gt;https:&sol;&sol;github.com&sol;JetBrains&sol;coderevi&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;&sol;a&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;https:&sol;&sol;github.com&sol;JetBrains&sol;teamcity-nuget-support&bsol;&quot;&gt;&lt;a href='https:&sol;&sol;github.com&sol;JetBrains&sol;teamcity-nuget-support' target='_blank'&gt;https:&sol;&sol;github.com&sol;JetBrains&sol;teamcity&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;&sol;a&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;a href='https:&sol;&sol;github.com&sol;JetBrains&sol;Grammar-Kit' target='_blank'&gt;https:&sol;&sol;github.com&sol;JetBrains&sol;Grammar-Kit&lt;&sol;a&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;https:&sol;&sol;github.com&sol;JetBrains&sol;intellij-starteam-plugin&bsol;&quot;&gt;&lt;a href='https:&sol;&sol;github.com&sol;JetBrains&sol;intellij-starteam-plugin' target='_blank'&gt;https:&sol;&sol;github.com&sol;JetBrains&sol;intellij&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;&sol;a&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;a href='https:&sol;&sol;github.com&sol;JetBrains&sol;la-clojure' target='_blank'&gt;https:&sol;&sol;github.com&sol;JetBrains&sol;la-clojure&lt;&sol;a&gt;&quot;,&quot;&lt;a href='https:&sol;&sol;github.com&sol;JetBrains&sol;MPS' target='_blank'&gt;https:&sol;&sol;github.com&sol;JetBrains&sol;MPS&lt;&sol;a&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;https:&sol;&sol;github.com&sol;JetBrains&sol;intellij-community&bsol;&quot;&gt;&lt;a href='https:&sol;&sol;github.com&sol;JetBrains&sol;intellij-community' target='_blank'&gt;https:&sol;&sol;github.com&sol;JetBrains&sol;intellij&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;&sol;a&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;https:&sol;&sol;github.com&sol;JetBrains&sol;TeamCity.ServiceMessages&bsol;&quot;&gt;&lt;a href='https:&sol;&sol;github.com&sol;JetBrains&sol;TeamCity.ServiceMessages' target='_blank'&gt;https:&sol;&sol;github.com&sol;JetBrains&sol;TeamCity&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;&sol;a&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;https:&sol;&sol;github.com&sol;JetBrains&sol;youtrack-rest-python-library&bsol;&quot;&gt;&lt;a href='https:&sol;&sol;github.com&sol;JetBrains&sol;youtrack-rest-python-library' target='_blank'&gt;https:&sol;&sol;github.com&sol;JetBrains&sol;youtrack&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;&sol;a&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;https:&sol;&sol;github.com&sol;JetBrains&sol;intellij-scala&bsol;&quot;&gt;&lt;a href='https:&sol;&sol;github.com&sol;JetBrains&sol;intellij-scala' target='_blank'&gt;https:&sol;&sol;github.com&sol;JetBrains&sol;intellij&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;&sol;a&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;https:&sol;&sol;github.com&sol;JetBrains&sol;teamcity-messages&bsol;&quot;&gt;&lt;a href='https:&sol;&sol;github.com&sol;JetBrains&sol;teamcity-messages' target='_blank'&gt;https:&sol;&sol;github.com&sol;JetBrains&sol;teamcity&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;&sol;a&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;https:&sol;&sol;github.com&sol;JetBrains&sol;teamcity-cpp&bsol;&quot;&gt;&lt;a href='https:&sol;&sol;github.com&sol;JetBrains&sol;teamcity-cpp' target='_blank'&gt;https:&sol;&sol;github.com&sol;JetBrains&sol;teamcity&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;&sol;a&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;a href='https:&sol;&sol;github.com&sol;JetBrains&sol;kotlin' target='_blank'&gt;https:&sol;&sol;github.com&sol;JetBrains&sol;kotlin&lt;&sol;a&gt;&quot;] }, \n",
       "{ name: &quot;&lt;span title=&bsol;&quot;stargazers_count: Int&bsol;&quot;&gt;stargazers_count&lt;&sol;span&gt;&quot;, children: [], rightAlign: true, values: [&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;23&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;115&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;290&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;6120&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;5&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;8&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;47&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;11&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;41&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;534&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;6&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;218&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;1241&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;12926&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;39&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;118&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;1066&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;125&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;27&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;39402&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;] }, \n",
       "{ name: &quot;&lt;span title=&bsol;&quot;topics: String&bsol;&quot;&gt;topics&lt;&sol;span&gt;&quot;, children: [], rightAlign: false, values: [&quot;[]&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;[jetbrains, jetbrains-youtrack, youtrack, youtrack-api]&bsol;&quot;&gt;[jetbrains, jetbrains-youtrack, youtr&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;[]&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;[ideavim, intellij, intellij-platform, jb-official, kotlin, vim, vim-emulator]&bsol;&quot;&gt;[ideavim, intellij, intellij-platform&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;[]&quot;,&quot;[]&quot;,&quot;[]&quot;,&quot;[]&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;[nuget, nuget-feed, teamcity, teamcity-plugin]&bsol;&quot;&gt;[nuget, nuget-feed, teamcity, teamcit&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;[]&quot;,&quot;[]&quot;,&quot;[]&quot;,&quot;[domain-specific-language, dsl]&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;[code-editor, ide, intellij, intellij-community, intellij-platform]&bsol;&quot;&gt;[code-editor, ide, intellij, intellij&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;[c-sharp, teamcity, teamcity-service-messages]&bsol;&quot;&gt;[c-sharp, teamcity, teamcity-service-&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;[]&quot;,&quot;[intellij-idea, intellij-plugin, scala]&quot;,&quot;[]&quot;,&quot;[]&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;[compiler, gradle-plugin, intellij-plugin, kotlin, kotlin-library, maven-plugin, programming-language]&bsol;&quot;&gt;[compiler, gradle-plugin, intellij-pl&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;] }, \n",
       "{ name: &quot;&lt;span title=&bsol;&quot;watchers: Int&bsol;&quot;&gt;watchers&lt;&sol;span&gt;&quot;, children: [], rightAlign: true, values: [&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;23&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;115&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;290&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;6120&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;5&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;8&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;47&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;11&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;41&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;534&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;6&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;218&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;1241&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;12926&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;39&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;118&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;1066&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;125&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;27&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;39402&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;] }, \n",
       "], id: 536870912, rootId: 536870912, totalRows: 562 } ) });\n",
       "&sol;*--&gt;*&sol;\n",
       "\n",
       "call_DataFrame(function() { DataFrame.renderTable(536870912) });\n",
       "\n",
       "\n",
       "        &lt;&sol;script&gt;\n",
       "        &lt;&sol;html&gt;\"></iframe>\n",
       "            <script>\n",
       "                function o_resize_iframe_out_1() {\n",
       "                    let elem = document.getElementById(\"iframe_out_1\");\n",
       "                    resize_iframe_out_1(elem);\n",
       "                    setInterval(resize_iframe_out_1, 5000, elem);\n",
       "                }\n",
       "                function resize_iframe_out_1(el) {\n",
       "                    let h = el.contentWindow.document.body.scrollHeight;\n",
       "                    el.height = h === 0 ? 0 : h + 41;\n",
       "                }\n",
       "            </script>        <html theme='dark'>\n",
       "        <head>\n",
       "            <style type=\"text/css\">\n",
       "                :root {\n",
       "    --background: #fff;\n",
       "    --background-odd: #f5f5f5;\n",
       "    --background-hover: #d9edfd;\n",
       "    --header-text-color: #474747;\n",
       "    --text-color: #848484;\n",
       "    --text-color-dark: #000;\n",
       "    --text-color-medium: #737373;\n",
       "    --text-color-pale: #b3b3b3;\n",
       "    --inner-border-color: #aaa;\n",
       "    --bold-border-color: #000;\n",
       "    --link-color: #296eaa;\n",
       "    --link-color-pale: #296eaa;\n",
       "    --link-hover: #1a466c;\n",
       "}\n",
       "\n",
       ":root[theme=\"dark\"], :root [data-jp-theme-light=\"false\"], .dataframe_dark{\n",
       "    --background: #303030;\n",
       "    --background-odd: #3c3c3c;\n",
       "    --background-hover: #464646;\n",
       "    --header-text-color: #dddddd;\n",
       "    --text-color: #b3b3b3;\n",
       "    --text-color-dark: #dddddd;\n",
       "    --text-color-medium: #b2b2b2;\n",
       "    --text-color-pale: #737373;\n",
       "    --inner-border-color: #707070;\n",
       "    --bold-border-color: #777777;\n",
       "    --link-color: #008dc0;\n",
       "    --link-color-pale: #97e1fb;\n",
       "    --link-hover: #00688e;\n",
       "}\n",
       "\n",
       "p.dataframe_description {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe {\n",
       "    font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n",
       "    font-size: 12px;\n",
       "    background-color: var(--background);\n",
       "    color: var(--text-color-dark);\n",
       "    border: none;\n",
       "    border-collapse: collapse;\n",
       "}\n",
       "\n",
       "table.dataframe th, td {\n",
       "    padding: 6px;\n",
       "    border: 1px solid transparent;\n",
       "    text-align: left;\n",
       "}\n",
       "\n",
       "table.dataframe th {\n",
       "    background-color: var(--background);\n",
       "    color: var(--header-text-color);\n",
       "}\n",
       "\n",
       "table.dataframe td {\n",
       "    vertical-align: top;\n",
       "    white-space: nowrap;\n",
       "}\n",
       "\n",
       "table.dataframe th.bottomBorder {\n",
       "    border-bottom-color: var(--bold-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe tbody > tr:nth-child(odd) {\n",
       "    background: var(--background-odd);\n",
       "}\n",
       "\n",
       "table.dataframe tbody > tr:nth-child(even) {\n",
       "    background: var(--background);\n",
       "}\n",
       "\n",
       "table.dataframe tbody > tr:hover {\n",
       "    background: var(--background-hover);\n",
       "}\n",
       "\n",
       "table.dataframe a {\n",
       "    cursor: pointer;\n",
       "    color: var(--link-color);\n",
       "    text-decoration: none;\n",
       "}\n",
       "\n",
       "table.dataframe tr:hover > td a {\n",
       "    color: var(--link-color-pale);\n",
       "}\n",
       "\n",
       "table.dataframe a:hover {\n",
       "    color: var(--link-hover);\n",
       "    text-decoration: underline;\n",
       "}\n",
       "\n",
       "table.dataframe img {\n",
       "    max-width: fit-content;\n",
       "}\n",
       "\n",
       "table.dataframe th.complex {\n",
       "    background-color: var(--background);\n",
       "    border: 1px solid var(--background);\n",
       "}\n",
       "\n",
       "table.dataframe .leftBorder {\n",
       "    border-left-color: var(--inner-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe .rightBorder {\n",
       "    border-right-color: var(--inner-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe .rightAlign {\n",
       "    text-align: right;\n",
       "}\n",
       "\n",
       "table.dataframe .expanderSvg {\n",
       "    width: 8px;\n",
       "    height: 8px;\n",
       "    margin-right: 3px;\n",
       "}\n",
       "\n",
       "table.dataframe .expander {\n",
       "    display: flex;\n",
       "    align-items: center;\n",
       "}\n",
       "\n",
       "/* formatting */\n",
       "\n",
       "table.dataframe .null {\n",
       "    color: var(--text-color-pale);\n",
       "}\n",
       "\n",
       "table.dataframe .structural {\n",
       "    color: var(--text-color-medium);\n",
       "    font-weight: bold;\n",
       "}\n",
       "\n",
       "table.dataframe .dataFrameCaption {\n",
       "    font-weight: bold;\n",
       "}\n",
       "\n",
       "table.dataframe .numbers {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe td:hover .formatted .structural, .null {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe tr:hover .formatted .structural, .null {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "\n",
       "            </style>\n",
       "        </head>\n",
       "        <body>\n",
       "            <table class=\"dataframe\" id=\"static_df_536870913\"><thead><tr><th class=\"bottomBorder\" style=\"text-align:left\">full_name</th><th class=\"bottomBorder\" style=\"text-align:left\">html_url</th><th class=\"bottomBorder\" style=\"text-align:left\">stargazers_count</th><th class=\"bottomBorder\" style=\"text-align:left\">topics</th><th class=\"bottomBorder\" style=\"text-align:left\">watchers</th></tr></thead><tbody><tr><td  style=\"vertical-align:top\">JetBrains/JPS</td><td  style=\"vertical-align:top\">https://github.com/JetBrains/JPS</td><td  style=\"vertical-align:top\">23</td><td  style=\"vertical-align:top\">[]</td><td  style=\"vertical-align:top\">23</td></tr><tr><td  style=\"vertical-align:top\">JetBrains/YouTrackSharp</td><td  style=\"vertical-align:top\">https://github.com/JetBrains/YouTrack<span class=\"structural\">...</span></td><td  style=\"vertical-align:top\">115</td><td  style=\"vertical-align:top\">[jetbrains, jetbrains-youtrack, youtr<span class=\"structural\">...</span></td><td  style=\"vertical-align:top\">115</td></tr><tr><td  style=\"vertical-align:top\">JetBrains/colorSchemeTool</td><td  style=\"vertical-align:top\">https://github.com/JetBrains/colorSch<span class=\"structural\">...</span></td><td  style=\"vertical-align:top\">290</td><td  style=\"vertical-align:top\">[]</td><td  style=\"vertical-align:top\">290</td></tr><tr><td  style=\"vertical-align:top\">JetBrains/ideavim</td><td  style=\"vertical-align:top\">https://github.com/JetBrains/ideavim</td><td  style=\"vertical-align:top\">6120</td><td  style=\"vertical-align:top\">[ideavim, intellij, intellij-platform<span class=\"structural\">...</span></td><td  style=\"vertical-align:top\">6120</td></tr><tr><td  style=\"vertical-align:top\">JetBrains/youtrack-vcs-hooks</td><td  style=\"vertical-align:top\">https://github.com/JetBrains/youtrack<span class=\"structural\">...</span></td><td  style=\"vertical-align:top\">5</td><td  style=\"vertical-align:top\">[]</td><td  style=\"vertical-align:top\">5</td></tr><tr><td  style=\"vertical-align:top\">JetBrains/youtrack-rest-ruby-library</td><td  style=\"vertical-align:top\">https://github.com/JetBrains/youtrack<span class=\"structural\">...</span></td><td  style=\"vertical-align:top\">8</td><td  style=\"vertical-align:top\">[]</td><td  style=\"vertical-align:top\">8</td></tr><tr><td  style=\"vertical-align:top\">JetBrains/emacs4ij</td><td  style=\"vertical-align:top\">https://github.com/JetBrains/emacs4ij</td><td  style=\"vertical-align:top\">47</td><td  style=\"vertical-align:top\">[]</td><td  style=\"vertical-align:top\">47</td></tr><tr><td  style=\"vertical-align:top\">JetBrains/codereview4intellij</td><td  style=\"vertical-align:top\">https://github.com/JetBrains/coderevi<span class=\"structural\">...</span></td><td  style=\"vertical-align:top\">11</td><td  style=\"vertical-align:top\">[]</td><td  style=\"vertical-align:top\">11</td></tr><tr><td  style=\"vertical-align:top\">JetBrains/teamcity-nuget-support</td><td  style=\"vertical-align:top\">https://github.com/JetBrains/teamcity<span class=\"structural\">...</span></td><td  style=\"vertical-align:top\">41</td><td  style=\"vertical-align:top\">[nuget, nuget-feed, teamcity, teamcit<span class=\"structural\">...</span></td><td  style=\"vertical-align:top\">41</td></tr><tr><td  style=\"vertical-align:top\">JetBrains/Grammar-Kit</td><td  style=\"vertical-align:top\">https://github.com/JetBrains/Grammar-Kit</td><td  style=\"vertical-align:top\">534</td><td  style=\"vertical-align:top\">[]</td><td  style=\"vertical-align:top\">534</td></tr><tr><td  style=\"vertical-align:top\">JetBrains/intellij-starteam-plugin</td><td  style=\"vertical-align:top\">https://github.com/JetBrains/intellij<span class=\"structural\">...</span></td><td  style=\"vertical-align:top\">6</td><td  style=\"vertical-align:top\">[]</td><td  style=\"vertical-align:top\">6</td></tr><tr><td  style=\"vertical-align:top\">JetBrains/la-clojure</td><td  style=\"vertical-align:top\">https://github.com/JetBrains/la-clojure</td><td  style=\"vertical-align:top\">218</td><td  style=\"vertical-align:top\">[]</td><td  style=\"vertical-align:top\">218</td></tr><tr><td  style=\"vertical-align:top\">JetBrains/MPS</td><td  style=\"vertical-align:top\">https://github.com/JetBrains/MPS</td><td  style=\"vertical-align:top\">1241</td><td  style=\"vertical-align:top\">[domain-specific-language, dsl]</td><td  style=\"vertical-align:top\">1241</td></tr><tr><td  style=\"vertical-align:top\">JetBrains/intellij-community</td><td  style=\"vertical-align:top\">https://github.com/JetBrains/intellij<span class=\"structural\">...</span></td><td  style=\"vertical-align:top\">12926</td><td  style=\"vertical-align:top\">[code-editor, ide, intellij, intellij<span class=\"structural\">...</span></td><td  style=\"vertical-align:top\">12926</td></tr><tr><td  style=\"vertical-align:top\">JetBrains/TeamCity.ServiceMessages</td><td  style=\"vertical-align:top\">https://github.com/JetBrains/TeamCity<span class=\"structural\">...</span></td><td  style=\"vertical-align:top\">39</td><td  style=\"vertical-align:top\">[c-sharp, teamcity, teamcity-service-<span class=\"structural\">...</span></td><td  style=\"vertical-align:top\">39</td></tr><tr><td  style=\"vertical-align:top\">JetBrains/youtrack-rest-python-library</td><td  style=\"vertical-align:top\">https://github.com/JetBrains/youtrack<span class=\"structural\">...</span></td><td  style=\"vertical-align:top\">118</td><td  style=\"vertical-align:top\">[]</td><td  style=\"vertical-align:top\">118</td></tr><tr><td  style=\"vertical-align:top\">JetBrains/intellij-scala</td><td  style=\"vertical-align:top\">https://github.com/JetBrains/intellij<span class=\"structural\">...</span></td><td  style=\"vertical-align:top\">1066</td><td  style=\"vertical-align:top\">[intellij-idea, intellij-plugin, scala]</td><td  style=\"vertical-align:top\">1066</td></tr><tr><td  style=\"vertical-align:top\">JetBrains/teamcity-messages</td><td  style=\"vertical-align:top\">https://github.com/JetBrains/teamcity<span class=\"structural\">...</span></td><td  style=\"vertical-align:top\">125</td><td  style=\"vertical-align:top\">[]</td><td  style=\"vertical-align:top\">125</td></tr><tr><td  style=\"vertical-align:top\">JetBrains/teamcity-cpp</td><td  style=\"vertical-align:top\">https://github.com/JetBrains/teamcity<span class=\"structural\">...</span></td><td  style=\"vertical-align:top\">27</td><td  style=\"vertical-align:top\">[]</td><td  style=\"vertical-align:top\">27</td></tr><tr><td  style=\"vertical-align:top\">JetBrains/kotlin</td><td  style=\"vertical-align:top\">https://github.com/JetBrains/kotlin</td><td  style=\"vertical-align:top\">39402</td><td  style=\"vertical-align:top\">[compiler, gradle-plugin, intellij-pl<span class=\"structural\">...</span></td><td  style=\"vertical-align:top\">39402</td></tr></tbody></table>\n",
       "        </body>\n",
       "        <script>\n",
       "            document.getElementById(\"static_df_536870913\").style.display = \"none\";\n",
       "        </script>\n",
       "        </html>"
      ],
      "application/kotlindataframe+json": "{\"$version\":\"2.1.1\",\"metadata\":{\"columns\":[\"full_name\",\"html_url\",\"stargazers_count\",\"topics\",\"watchers\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"java.net.URL\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"}],\"nrow\":562,\"ncol\":5},\"kotlin_dataframe\":[{\"full_name\":\"JetBrains/JPS\",\"html_url\":\"https://github.com/JetBrains/JPS\",\"stargazers_count\":23,\"topics\":\"[]\",\"watchers\":23},{\"full_name\":\"JetBrains/YouTrackSharp\",\"html_url\":\"https://github.com/JetBrains/YouTrackSharp\",\"stargazers_count\":115,\"topics\":\"[jetbrains, jetbrains-youtrack, youtrack, youtrack-api]\",\"watchers\":115},{\"full_name\":\"JetBrains/colorSchemeTool\",\"html_url\":\"https://github.com/JetBrains/colorSchemeTool\",\"stargazers_count\":290,\"topics\":\"[]\",\"watchers\":290},{\"full_name\":\"JetBrains/ideavim\",\"html_url\":\"https://github.com/JetBrains/ideavim\",\"stargazers_count\":6120,\"topics\":\"[ideavim, intellij, intellij-platform, jb-official, kotlin, vim, vim-emulator]\",\"watchers\":6120},{\"full_name\":\"JetBrains/youtrack-vcs-hooks\",\"html_url\":\"https://github.com/JetBrains/youtrack-vcs-hooks\",\"stargazers_count\":5,\"topics\":\"[]\",\"watchers\":5},{\"full_name\":\"JetBrains/youtrack-rest-ruby-library\",\"html_url\":\"https://github.com/JetBrains/youtrack-rest-ruby-library\",\"stargazers_count\":8,\"topics\":\"[]\",\"watchers\":8},{\"full_name\":\"JetBrains/emacs4ij\",\"html_url\":\"https://github.com/JetBrains/emacs4ij\",\"stargazers_count\":47,\"topics\":\"[]\",\"watchers\":47},{\"full_name\":\"JetBrains/codereview4intellij\",\"html_url\":\"https://github.com/JetBrains/codereview4intellij\",\"stargazers_count\":11,\"topics\":\"[]\",\"watchers\":11},{\"full_name\":\"JetBrains/teamcity-nuget-support\",\"html_url\":\"https://github.com/JetBrains/teamcity-nuget-support\",\"stargazers_count\":41,\"topics\":\"[nuget, nuget-feed, teamcity, teamcity-plugin]\",\"watchers\":41},{\"full_name\":\"JetBrains/Grammar-Kit\",\"html_url\":\"https://github.com/JetBrains/Grammar-Kit\",\"stargazers_count\":534,\"topics\":\"[]\",\"watchers\":534},{\"full_name\":\"JetBrains/intellij-starteam-plugin\",\"html_url\":\"https://github.com/JetBrains/intellij-starteam-plugin\",\"stargazers_count\":6,\"topics\":\"[]\",\"watchers\":6},{\"full_name\":\"JetBrains/la-clojure\",\"html_url\":\"https://github.com/JetBrains/la-clojure\",\"stargazers_count\":218,\"topics\":\"[]\",\"watchers\":218},{\"full_name\":\"JetBrains/MPS\",\"html_url\":\"https://github.com/JetBrains/MPS\",\"stargazers_count\":1241,\"topics\":\"[domain-specific-language, dsl]\",\"watchers\":1241},{\"full_name\":\"JetBrains/intellij-community\",\"html_url\":\"https://github.com/JetBrains/intellij-community\",\"stargazers_count\":12926,\"topics\":\"[code-editor, ide, intellij, intellij-community, intellij-platform]\",\"watchers\":12926},{\"full_name\":\"JetBrains/TeamCity.ServiceMessages\",\"html_url\":\"https://github.com/JetBrains/TeamCity.ServiceMessages\",\"stargazers_count\":39,\"topics\":\"[c-sharp, teamcity, teamcity-service-messages]\",\"watchers\":39},{\"full_name\":\"JetBrains/youtrack-rest-python-library\",\"html_url\":\"https://github.com/JetBrains/youtrack-rest-python-library\",\"stargazers_count\":118,\"topics\":\"[]\",\"watchers\":118},{\"full_name\":\"JetBrains/intellij-scala\",\"html_url\":\"https://github.com/JetBrains/intellij-scala\",\"stargazers_count\":1066,\"topics\":\"[intellij-idea, intellij-plugin, scala]\",\"watchers\":1066},{\"full_name\":\"JetBrains/teamcity-messages\",\"html_url\":\"https://github.com/JetBrains/teamcity-messages\",\"stargazers_count\":125,\"topics\":\"[]\",\"watchers\":125},{\"full_name\":\"JetBrains/teamcity-cpp\",\"html_url\":\"https://github.com/JetBrains/teamcity-cpp\",\"stargazers_count\":27,\"topics\":\"[]\",\"watchers\":27},{\"full_name\":\"JetBrains/kotlin\",\"html_url\":\"https://github.com/JetBrains/kotlin\",\"stargazers_count\":39402,\"topics\":\"[compiler, gradle-plugin, intellij-plugin, kotlin, kotlin-library, maven-plugin, programming-language]\",\"watchers\":39402}]}"
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 3
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "Kotlin Notebook has special interactive outputs for `DataFrame`. Learn more about them here."
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "Use `.describe()` method to get dataset summaries — column types, number of nulls and simple statistics."
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-01T13:42:32.765356Z",
     "start_time": "2025-05-01T13:42:32.666531Z"
    }
   },
   "cell_type": "code",
   "source": "df.describe()",
   "outputs": [
    {
     "data": {
      "text/html": [
       "            <iframe onload=\"o_resize_iframe_out_3()\" style=\"width:100%;\" class=\"result_container\" id=\"iframe_out_3\" frameBorder=\"0\" srcdoc=\"        &lt;html theme='dark'&gt;\n",
       "        &lt;head&gt;\n",
       "            &lt;style type=&quot;text&sol;css&quot;&gt;\n",
       "                :root {\n",
       "    --background: #fff;\n",
       "    --background-odd: #f5f5f5;\n",
       "    --background-hover: #d9edfd;\n",
       "    --header-text-color: #474747;\n",
       "    --text-color: #848484;\n",
       "    --text-color-dark: #000;\n",
       "    --text-color-medium: #737373;\n",
       "    --text-color-pale: #b3b3b3;\n",
       "    --inner-border-color: #aaa;\n",
       "    --bold-border-color: #000;\n",
       "    --link-color: #296eaa;\n",
       "    --link-color-pale: #296eaa;\n",
       "    --link-hover: #1a466c;\n",
       "}\n",
       "\n",
       ":root[theme=&quot;dark&quot;], :root [data-jp-theme-light=&quot;false&quot;], .dataframe_dark{\n",
       "    --background: #303030;\n",
       "    --background-odd: #3c3c3c;\n",
       "    --background-hover: #464646;\n",
       "    --header-text-color: #dddddd;\n",
       "    --text-color: #b3b3b3;\n",
       "    --text-color-dark: #dddddd;\n",
       "    --text-color-medium: #b2b2b2;\n",
       "    --text-color-pale: #737373;\n",
       "    --inner-border-color: #707070;\n",
       "    --bold-border-color: #777777;\n",
       "    --link-color: #008dc0;\n",
       "    --link-color-pale: #97e1fb;\n",
       "    --link-hover: #00688e;\n",
       "}\n",
       "\n",
       "p.dataframe_description {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe {\n",
       "    font-family: &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif;\n",
       "    font-size: 12px;\n",
       "    background-color: var(--background);\n",
       "    color: var(--text-color-dark);\n",
       "    border: none;\n",
       "    border-collapse: collapse;\n",
       "}\n",
       "\n",
       "table.dataframe th, td {\n",
       "    padding: 6px;\n",
       "    border: 1px solid transparent;\n",
       "    text-align: left;\n",
       "}\n",
       "\n",
       "table.dataframe th {\n",
       "    background-color: var(--background);\n",
       "    color: var(--header-text-color);\n",
       "}\n",
       "\n",
       "table.dataframe td {\n",
       "    vertical-align: top;\n",
       "    white-space: nowrap;\n",
       "}\n",
       "\n",
       "table.dataframe th.bottomBorder {\n",
       "    border-bottom-color: var(--bold-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe tbody &gt; tr:nth-child(odd) {\n",
       "    background: var(--background-odd);\n",
       "}\n",
       "\n",
       "table.dataframe tbody &gt; tr:nth-child(even) {\n",
       "    background: var(--background);\n",
       "}\n",
       "\n",
       "table.dataframe tbody &gt; tr:hover {\n",
       "    background: var(--background-hover);\n",
       "}\n",
       "\n",
       "table.dataframe a {\n",
       "    cursor: pointer;\n",
       "    color: var(--link-color);\n",
       "    text-decoration: none;\n",
       "}\n",
       "\n",
       "table.dataframe tr:hover &gt; td a {\n",
       "    color: var(--link-color-pale);\n",
       "}\n",
       "\n",
       "table.dataframe a:hover {\n",
       "    color: var(--link-hover);\n",
       "    text-decoration: underline;\n",
       "}\n",
       "\n",
       "table.dataframe img {\n",
       "    max-width: fit-content;\n",
       "}\n",
       "\n",
       "table.dataframe th.complex {\n",
       "    background-color: var(--background);\n",
       "    border: 1px solid var(--background);\n",
       "}\n",
       "\n",
       "table.dataframe .leftBorder {\n",
       "    border-left-color: var(--inner-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe .rightBorder {\n",
       "    border-right-color: var(--inner-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe .rightAlign {\n",
       "    text-align: right;\n",
       "}\n",
       "\n",
       "table.dataframe .expanderSvg {\n",
       "    width: 8px;\n",
       "    height: 8px;\n",
       "    margin-right: 3px;\n",
       "}\n",
       "\n",
       "table.dataframe .expander {\n",
       "    display: flex;\n",
       "    align-items: center;\n",
       "}\n",
       "\n",
       "&sol;* formatting *&sol;\n",
       "\n",
       "table.dataframe .null {\n",
       "    color: var(--text-color-pale);\n",
       "}\n",
       "\n",
       "table.dataframe .structural {\n",
       "    color: var(--text-color-medium);\n",
       "    font-weight: bold;\n",
       "}\n",
       "\n",
       "table.dataframe .dataFrameCaption {\n",
       "    font-weight: bold;\n",
       "}\n",
       "\n",
       "table.dataframe .numbers {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe td:hover .formatted .structural, .null {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe tr:hover .formatted .structural, .null {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "\n",
       ":root {\n",
       "    --scroll-bg: #f5f5f5;\n",
       "    --scroll-fg: #b3b3b3;\n",
       "}\n",
       ":root[theme=&quot;dark&quot;], :root [data-jp-theme-light=&quot;false&quot;]{\n",
       "    --scroll-bg: #3c3c3c;\n",
       "    --scroll-fg: #97e1fb;\n",
       "}\n",
       "body {\n",
       "    scrollbar-color: var(--scroll-fg) var(--scroll-bg);\n",
       "}\n",
       "body::-webkit-scrollbar {\n",
       "    width: 10px; &sol;* Mostly for vertical scrollbars *&sol;\n",
       "    height: 10px; &sol;* Mostly for horizontal scrollbars *&sol;\n",
       "}\n",
       "body::-webkit-scrollbar-thumb {\n",
       "    background-color: var(--scroll-fg);\n",
       "}\n",
       "body::-webkit-scrollbar-track {\n",
       "    background-color: var(--scroll-bg);\n",
       "}\n",
       "            &lt;&sol;style&gt;\n",
       "        &lt;&sol;head&gt;\n",
       "        &lt;body&gt;\n",
       "            &lt;table class=&quot;dataframe&quot; id=&quot;df_536870916&quot;&gt;&lt;&sol;table&gt;\n",
       "\n",
       "&lt;p class=&quot;dataframe_description&quot;&gt;DataFrame: rowsCount = 5, columnsCount = 12&lt;&sol;p&gt;\n",
       "\n",
       "        &lt;&sol;body&gt;\n",
       "        &lt;script&gt;\n",
       "            (function () {\n",
       "    window.DataFrame = window.DataFrame || new (function () {\n",
       "        this.addTable = function (df) {\n",
       "            let cols = df.cols;\n",
       "            for (let i = 0; i &lt; cols.length; i++) {\n",
       "                for (let c of cols[i].children) {\n",
       "                    cols[c].parent = i;\n",
       "                }\n",
       "            }\n",
       "            df.nrow = 0\n",
       "            for (let i = 0; i &lt; df.cols.length; i++) {\n",
       "                if (df.cols[i].values.length &gt; df.nrow) df.nrow = df.cols[i].values.length\n",
       "            }\n",
       "            if (df.id === df.rootId) {\n",
       "                df.expandedFrames = new Set()\n",
       "                df.childFrames = {}\n",
       "                const table = this.getTableElement(df.id)\n",
       "                table.df = df\n",
       "                for (let i = 0; i &lt; df.cols.length; i++) {\n",
       "                    let col = df.cols[i]\n",
       "                    if (col.parent === undefined &amp;&amp; col.children.length &gt; 0) col.expanded = true\n",
       "                }\n",
       "            } else {\n",
       "                const rootDf = this.getTableData(df.rootId)\n",
       "                rootDf.childFrames[df.id] = df\n",
       "            }\n",
       "        }\n",
       "\n",
       "        this.computeRenderData = function (df) {\n",
       "            let result = []\n",
       "            let pos = 0\n",
       "            for (let col = 0; col &lt; df.cols.length; col++) {\n",
       "                if (df.cols[col].parent === undefined)\n",
       "                    pos += this.computeRenderDataRec(df.cols, col, pos, 0, result, false, false)\n",
       "            }\n",
       "            for (let i = 0; i &lt; result.length; i++) {\n",
       "                let row = result[i]\n",
       "                for (let j = 0; j &lt; row.length; j++) {\n",
       "                    let cell = row[j]\n",
       "                    if (j === 0)\n",
       "                        cell.leftBd = false\n",
       "                    if (j &lt; row.length - 1) {\n",
       "                        let nextData = row[j + 1]\n",
       "                        if (nextData.leftBd) cell.rightBd = true\n",
       "                        else if (cell.rightBd) nextData.leftBd = true\n",
       "                    } else cell.rightBd = false\n",
       "                }\n",
       "            }\n",
       "            return result\n",
       "        }\n",
       "\n",
       "        this.computeRenderDataRec = function (cols, colId, pos, depth, result, leftBorder, rightBorder) {\n",
       "            if (result.length === depth) {\n",
       "                const array = [];\n",
       "                if (pos &gt; 0) {\n",
       "                    let j = 0\n",
       "                    for (let i = 0; j &lt; pos; i++) {\n",
       "                        let c = result[depth - 1][i]\n",
       "                        j += c.span\n",
       "                        let copy = Object.assign({empty: true}, c)\n",
       "                        array.push(copy)\n",
       "                    }\n",
       "                }\n",
       "                result.push(array)\n",
       "            }\n",
       "            const col = cols[colId];\n",
       "            let size = 0;\n",
       "            if (col.expanded) {\n",
       "                let childPos = pos\n",
       "                for (let i = 0; i &lt; col.children.length; i++) {\n",
       "                    let child = col.children[i]\n",
       "                    let childLeft = i === 0 &amp;&amp; (col.children.length &gt; 1 || leftBorder)\n",
       "                    let childRight = i === col.children.length - 1 &amp;&amp; (col.children.length &gt; 1 || rightBorder)\n",
       "                    let childSize = this.computeRenderDataRec(cols, child, childPos, depth + 1, result, childLeft, childRight)\n",
       "                    childPos += childSize\n",
       "                    size += childSize\n",
       "                }\n",
       "            } else {\n",
       "                for (let i = depth + 1; i &lt; result.length; i++)\n",
       "                    result[i].push({id: colId, span: 1, leftBd: leftBorder, rightBd: rightBorder, empty: true})\n",
       "                size = 1\n",
       "            }\n",
       "            let left = leftBorder\n",
       "            let right = rightBorder\n",
       "            if (size &gt; 1) {\n",
       "                left = true\n",
       "                right = true\n",
       "            }\n",
       "            result[depth].push({id: colId, span: size, leftBd: left, rightBd: right})\n",
       "            return size\n",
       "        }\n",
       "\n",
       "        this.getTableElement = function (id) {\n",
       "            return document.getElementById(&quot;df_&quot; + id)\n",
       "        }\n",
       "\n",
       "        this.getTableData = function (id) {\n",
       "            return this.getTableElement(id).df\n",
       "        }\n",
       "\n",
       "        this.createExpander = function (isExpanded) {\n",
       "            const svgNs = &quot;http:&sol;&sol;www.w3.org&sol;2000&sol;svg&quot;\n",
       "            let svg = document.createElementNS(svgNs, &quot;svg&quot;)\n",
       "            svg.classList.add(&quot;expanderSvg&quot;)\n",
       "            let path = document.createElementNS(svgNs, &quot;path&quot;)\n",
       "            if (isExpanded) {\n",
       "                svg.setAttribute(&quot;viewBox&quot;, &quot;0 -2 8 8&quot;)\n",
       "                path.setAttribute(&quot;d&quot;, &quot;M1 0 l-1 1 4 4 4 -4 -1 -1 -3 3Z&quot;)\n",
       "            } else {\n",
       "                svg.setAttribute(&quot;viewBox&quot;, &quot;-2 0 8 8&quot;)\n",
       "                path.setAttribute(&quot;d&quot;, &quot;M1 0 l-1 1 3 3 -3 3 1 1 4 -4Z&quot;)\n",
       "            }\n",
       "            path.setAttribute(&quot;fill&quot;, &quot;currentColor&quot;)\n",
       "            svg.appendChild(path)\n",
       "            return svg\n",
       "        }\n",
       "\n",
       "        this.renderTable = function (id) {\n",
       "\n",
       "            let table = this.getTableElement(id)\n",
       "\n",
       "            if (table === null) return\n",
       "\n",
       "            table.innerHTML = &quot;&quot;\n",
       "\n",
       "            let df = table.df\n",
       "            let rootDf = df.rootId === df.id ? df : this.getTableData(df.rootId)\n",
       "\n",
       "            &sol;&sol; header\n",
       "            let header = document.createElement(&quot;thead&quot;)\n",
       "            table.appendChild(header)\n",
       "\n",
       "            let renderData = this.computeRenderData(df)\n",
       "            for (let j = 0; j &lt; renderData.length; j++) {\n",
       "                let rowData = renderData[j]\n",
       "                let tr = document.createElement(&quot;tr&quot;);\n",
       "                let isLastRow = j === renderData.length - 1\n",
       "                header.appendChild(tr);\n",
       "                for (let i = 0; i &lt; rowData.length; i++) {\n",
       "                    let cell = rowData[i]\n",
       "                    let th = document.createElement(&quot;th&quot;);\n",
       "                    th.setAttribute(&quot;colspan&quot;, cell.span)\n",
       "                    let colId = cell.id\n",
       "                    let col = df.cols[colId];\n",
       "                    if (!cell.empty) {\n",
       "                        if (col.children.length === 0) {\n",
       "                            th.innerHTML = col.name\n",
       "                        } else {\n",
       "                            let link = document.createElement(&quot;a&quot;)\n",
       "                            link.className = &quot;expander&quot;\n",
       "                            let that = this\n",
       "                            link.onclick = function () {\n",
       "                                col.expanded = !col.expanded\n",
       "                                that.renderTable(id)\n",
       "                            }\n",
       "                            link.appendChild(this.createExpander(col.expanded))\n",
       "                            link.innerHTML += col.name\n",
       "                            th.appendChild(link)\n",
       "                        }\n",
       "                    }\n",
       "                    let classes = (cell.leftBd ? &quot; leftBorder&quot; : &quot;&quot;) + (cell.rightBd ? &quot; rightBorder&quot; : &quot;&quot;)\n",
       "                    if (col.rightAlign)\n",
       "                        classes += &quot; rightAlign&quot;\n",
       "                    if (isLastRow)\n",
       "                        classes += &quot; bottomBorder&quot;\n",
       "                    if (classes.length &gt; 0)\n",
       "                        th.setAttribute(&quot;class&quot;, classes)\n",
       "                    tr.appendChild(th)\n",
       "                }\n",
       "            }\n",
       "\n",
       "            &sol;&sol; body\n",
       "            let body = document.createElement(&quot;tbody&quot;)\n",
       "            table.appendChild(body)\n",
       "\n",
       "            let columns = renderData.pop()\n",
       "            for (let row = 0; row &lt; df.nrow; row++) {\n",
       "                let tr = document.createElement(&quot;tr&quot;);\n",
       "                body.appendChild(tr)\n",
       "                for (let i = 0; i &lt; columns.length; i++) {\n",
       "                    let cell = columns[i]\n",
       "                    let td = document.createElement(&quot;td&quot;);\n",
       "                    let colId = cell.id\n",
       "                    let col = df.cols[colId]\n",
       "                    let classes = (cell.leftBd ? &quot; leftBorder&quot; : &quot;&quot;) + (cell.rightBd ? &quot; rightBorder&quot; : &quot;&quot;)\n",
       "                    if (col.rightAlign)\n",
       "                        classes += &quot; rightAlign&quot;\n",
       "                    if (classes.length &gt; 0)\n",
       "                        td.setAttribute(&quot;class&quot;, classes)\n",
       "                    tr.appendChild(td)\n",
       "                    let value = col.values[row]\n",
       "                    if (value.frameId !== undefined) {\n",
       "                        let frameId = value.frameId\n",
       "                        let expanded = rootDf.expandedFrames.has(frameId)\n",
       "                        let link = document.createElement(&quot;a&quot;)\n",
       "                        link.className = &quot;expander&quot;\n",
       "                        let that = this\n",
       "                        link.onclick = function () {\n",
       "                            if (rootDf.expandedFrames.has(frameId))\n",
       "                                rootDf.expandedFrames.delete(frameId)\n",
       "                            else rootDf.expandedFrames.add(frameId)\n",
       "                            that.renderTable(id)\n",
       "                        }\n",
       "                        link.appendChild(this.createExpander(expanded))\n",
       "                        link.innerHTML += value.value\n",
       "                        if (expanded) {\n",
       "                            td.appendChild(link)\n",
       "                            td.appendChild(document.createElement(&quot;p&quot;))\n",
       "                            const childTable = document.createElement(&quot;table&quot;)\n",
       "                            childTable.className = &quot;dataframe&quot;\n",
       "                            childTable.id = &quot;df_&quot; + frameId\n",
       "                            let childDf = rootDf.childFrames[frameId]\n",
       "                            childTable.df = childDf\n",
       "                            td.appendChild(childTable)\n",
       "                            this.renderTable(frameId)\n",
       "                            if (childDf.nrow !== childDf.totalRows) {\n",
       "                                const footer = document.createElement(&quot;p&quot;)\n",
       "                                footer.innerText = `... showing only top ${childDf.nrow} of ${childDf.totalRows} rows`\n",
       "                                td.appendChild(footer)\n",
       "                            }\n",
       "                        } else {\n",
       "                            td.appendChild(link)\n",
       "                        }\n",
       "                    } else if (value.style !== undefined) {\n",
       "                        td.innerHTML = value.value\n",
       "                        td.setAttribute(&quot;style&quot;, value.style)\n",
       "                    } else td.innerHTML = value\n",
       "                    this.nodeScriptReplace(td)\n",
       "                }\n",
       "            }\n",
       "        }\n",
       "\n",
       "        this.nodeScriptReplace = function (node) {\n",
       "            if (this.nodeScriptIs(node) === true) {\n",
       "                node.parentNode.replaceChild(this.nodeScriptClone(node), node);\n",
       "            } else {\n",
       "                let i = -1, children = node.childNodes;\n",
       "                while (++i &lt; children.length) {\n",
       "                    this.nodeScriptReplace(children[i]);\n",
       "                }\n",
       "            }\n",
       "\n",
       "            return node;\n",
       "        }\n",
       "\n",
       "        this.nodeScriptClone = function (node) {\n",
       "            let script = document.createElement(&quot;script&quot;);\n",
       "            script.text = node.innerHTML;\n",
       "\n",
       "            let i = -1, attrs = node.attributes, attr;\n",
       "            while (++i &lt; attrs.length) {\n",
       "                script.setAttribute((attr = attrs[i]).name, attr.value);\n",
       "            }\n",
       "            return script;\n",
       "        }\n",
       "\n",
       "        this.nodeScriptIs = function (node) {\n",
       "            return node.tagName === 'SCRIPT';\n",
       "        }\n",
       "    })()\n",
       "\n",
       "    window.call_DataFrame = function (f) {\n",
       "        return f();\n",
       "    };\n",
       "\n",
       "    let funQueue = window[&quot;kotlinQueues&quot;] &amp;&amp; window[&quot;kotlinQueues&quot;][&quot;DataFrame&quot;];\n",
       "    if (funQueue) {\n",
       "        funQueue.forEach(function (f) {\n",
       "            f();\n",
       "        });\n",
       "        funQueue = [];\n",
       "    }\n",
       "})()\n",
       "\n",
       "&sol;*&lt;!--*&sol;\n",
       "call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: &quot;&lt;span title=&bsol;&quot;name: String&bsol;&quot;&gt;name&lt;&sol;span&gt;&quot;, children: [], rightAlign: false, values: [&quot;full_name&quot;,&quot;html_url&quot;,&quot;stargazers_count&quot;,&quot;topics&quot;,&quot;watchers&quot;] }, \n",
       "{ name: &quot;&lt;span title=&bsol;&quot;type: String&bsol;&quot;&gt;type&lt;&sol;span&gt;&quot;, children: [], rightAlign: false, values: [&quot;String&quot;,&quot;URL&quot;,&quot;Int&quot;,&quot;String&quot;,&quot;Int&quot;] }, \n",
       "{ name: &quot;&lt;span title=&bsol;&quot;count: Int&bsol;&quot;&gt;count&lt;&sol;span&gt;&quot;, children: [], rightAlign: true, values: [&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;562&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;562&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;562&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;562&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;562&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;] }, \n",
       "{ name: &quot;&lt;span title=&bsol;&quot;unique: Int&bsol;&quot;&gt;unique&lt;&sol;span&gt;&quot;, children: [], rightAlign: true, values: [&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;562&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;562&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;165&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;145&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;165&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;] }, \n",
       "{ name: &quot;&lt;span title=&bsol;&quot;nulls: Int&bsol;&quot;&gt;nulls&lt;&sol;span&gt;&quot;, children: [], rightAlign: true, values: [&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;0&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;0&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;0&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;0&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;0&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;] }, \n",
       "{ name: &quot;&lt;span title=&bsol;&quot;top: java.io.Serializable&bsol;&quot;&gt;top&lt;&sol;span&gt;&quot;, children: [], rightAlign: false, values: [&quot;JetBrains&sol;JPS&quot;,&quot;&lt;a href='https:&sol;&sol;github.com&sol;JetBrains&sol;JPS' target='_blank'&gt;https:&sol;&sol;github.com&sol;JetBrains&sol;JPS&lt;&sol;a&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;1&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;[]&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;1&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;] }, \n",
       "{ name: &quot;&lt;span title=&bsol;&quot;freq: Int&bsol;&quot;&gt;freq&lt;&sol;span&gt;&quot;, children: [], rightAlign: true, values: [&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;1&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;1&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;100&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;401&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;100&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;] }, \n",
       "{ name: &quot;&lt;span title=&bsol;&quot;mean: Double?&bsol;&quot;&gt;mean&lt;&sol;span&gt;&quot;, children: [], rightAlign: true, values: [&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;null&bsol;&quot;&gt;null&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;null&bsol;&quot;&gt;null&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;244,759786&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;null&bsol;&quot;&gt;null&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;244,759786&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;] }, \n",
       "{ name: &quot;&lt;span title=&bsol;&quot;std: Double?&bsol;&quot;&gt;std&lt;&sol;span&gt;&quot;, children: [], rightAlign: true, values: [&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;null&bsol;&quot;&gt;null&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;null&bsol;&quot;&gt;null&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;1862,801982&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;null&bsol;&quot;&gt;null&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;1862,801982&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;] }, \n",
       "{ name: &quot;&lt;span title=&bsol;&quot;min: Comparable&lt;*&gt;?&bsol;&quot;&gt;min&lt;&sol;span&gt;&quot;, children: [], rightAlign: false, values: [&quot;JetBrains&sol;Android-Tuts-Samples&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;null&bsol;&quot;&gt;null&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;0&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;[2d, graphics, java, skia]&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;0&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;] }, \n",
       "{ name: &quot;&lt;span title=&bsol;&quot;median: Comparable&lt;*&gt;?&bsol;&quot;&gt;median&lt;&sol;span&gt;&quot;, children: [], rightAlign: false, values: [&quot;JetBrains&sol;lightbeam&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;null&bsol;&quot;&gt;null&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;8&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;[]&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;8&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;] }, \n",
       "{ name: &quot;&lt;span title=&bsol;&quot;max: Comparable&lt;*&gt;?&bsol;&quot;&gt;max&lt;&sol;span&gt;&quot;, children: [], rightAlign: false, values: [&quot;JetBrains&sol;ztools&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;null&bsol;&quot;&gt;null&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;39402&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;[youtrack, youtrack-workflow]&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;39402&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;] }, \n",
       "], id: 536870916, rootId: 536870916, totalRows: 5 } ) });\n",
       "&sol;*--&gt;*&sol;\n",
       "\n",
       "call_DataFrame(function() { DataFrame.renderTable(536870916) });\n",
       "\n",
       "\n",
       "        &lt;&sol;script&gt;\n",
       "        &lt;&sol;html&gt;\"></iframe>\n",
       "            <script>\n",
       "                function o_resize_iframe_out_3() {\n",
       "                    let elem = document.getElementById(\"iframe_out_3\");\n",
       "                    resize_iframe_out_3(elem);\n",
       "                    setInterval(resize_iframe_out_3, 5000, elem);\n",
       "                }\n",
       "                function resize_iframe_out_3(el) {\n",
       "                    let h = el.contentWindow.document.body.scrollHeight;\n",
       "                    el.height = h === 0 ? 0 : h + 41;\n",
       "                }\n",
       "            </script>        <html theme='dark'>\n",
       "        <head>\n",
       "            <style type=\"text/css\">\n",
       "                :root {\n",
       "    --background: #fff;\n",
       "    --background-odd: #f5f5f5;\n",
       "    --background-hover: #d9edfd;\n",
       "    --header-text-color: #474747;\n",
       "    --text-color: #848484;\n",
       "    --text-color-dark: #000;\n",
       "    --text-color-medium: #737373;\n",
       "    --text-color-pale: #b3b3b3;\n",
       "    --inner-border-color: #aaa;\n",
       "    --bold-border-color: #000;\n",
       "    --link-color: #296eaa;\n",
       "    --link-color-pale: #296eaa;\n",
       "    --link-hover: #1a466c;\n",
       "}\n",
       "\n",
       ":root[theme=\"dark\"], :root [data-jp-theme-light=\"false\"], .dataframe_dark{\n",
       "    --background: #303030;\n",
       "    --background-odd: #3c3c3c;\n",
       "    --background-hover: #464646;\n",
       "    --header-text-color: #dddddd;\n",
       "    --text-color: #b3b3b3;\n",
       "    --text-color-dark: #dddddd;\n",
       "    --text-color-medium: #b2b2b2;\n",
       "    --text-color-pale: #737373;\n",
       "    --inner-border-color: #707070;\n",
       "    --bold-border-color: #777777;\n",
       "    --link-color: #008dc0;\n",
       "    --link-color-pale: #97e1fb;\n",
       "    --link-hover: #00688e;\n",
       "}\n",
       "\n",
       "p.dataframe_description {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe {\n",
       "    font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n",
       "    font-size: 12px;\n",
       "    background-color: var(--background);\n",
       "    color: var(--text-color-dark);\n",
       "    border: none;\n",
       "    border-collapse: collapse;\n",
       "}\n",
       "\n",
       "table.dataframe th, td {\n",
       "    padding: 6px;\n",
       "    border: 1px solid transparent;\n",
       "    text-align: left;\n",
       "}\n",
       "\n",
       "table.dataframe th {\n",
       "    background-color: var(--background);\n",
       "    color: var(--header-text-color);\n",
       "}\n",
       "\n",
       "table.dataframe td {\n",
       "    vertical-align: top;\n",
       "    white-space: nowrap;\n",
       "}\n",
       "\n",
       "table.dataframe th.bottomBorder {\n",
       "    border-bottom-color: var(--bold-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe tbody > tr:nth-child(odd) {\n",
       "    background: var(--background-odd);\n",
       "}\n",
       "\n",
       "table.dataframe tbody > tr:nth-child(even) {\n",
       "    background: var(--background);\n",
       "}\n",
       "\n",
       "table.dataframe tbody > tr:hover {\n",
       "    background: var(--background-hover);\n",
       "}\n",
       "\n",
       "table.dataframe a {\n",
       "    cursor: pointer;\n",
       "    color: var(--link-color);\n",
       "    text-decoration: none;\n",
       "}\n",
       "\n",
       "table.dataframe tr:hover > td a {\n",
       "    color: var(--link-color-pale);\n",
       "}\n",
       "\n",
       "table.dataframe a:hover {\n",
       "    color: var(--link-hover);\n",
       "    text-decoration: underline;\n",
       "}\n",
       "\n",
       "table.dataframe img {\n",
       "    max-width: fit-content;\n",
       "}\n",
       "\n",
       "table.dataframe th.complex {\n",
       "    background-color: var(--background);\n",
       "    border: 1px solid var(--background);\n",
       "}\n",
       "\n",
       "table.dataframe .leftBorder {\n",
       "    border-left-color: var(--inner-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe .rightBorder {\n",
       "    border-right-color: var(--inner-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe .rightAlign {\n",
       "    text-align: right;\n",
       "}\n",
       "\n",
       "table.dataframe .expanderSvg {\n",
       "    width: 8px;\n",
       "    height: 8px;\n",
       "    margin-right: 3px;\n",
       "}\n",
       "\n",
       "table.dataframe .expander {\n",
       "    display: flex;\n",
       "    align-items: center;\n",
       "}\n",
       "\n",
       "/* formatting */\n",
       "\n",
       "table.dataframe .null {\n",
       "    color: var(--text-color-pale);\n",
       "}\n",
       "\n",
       "table.dataframe .structural {\n",
       "    color: var(--text-color-medium);\n",
       "    font-weight: bold;\n",
       "}\n",
       "\n",
       "table.dataframe .dataFrameCaption {\n",
       "    font-weight: bold;\n",
       "}\n",
       "\n",
       "table.dataframe .numbers {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe td:hover .formatted .structural, .null {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe tr:hover .formatted .structural, .null {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "\n",
       "            </style>\n",
       "        </head>\n",
       "        <body>\n",
       "            <table class=\"dataframe\" id=\"static_df_536870917\"><thead><tr><th class=\"bottomBorder\" style=\"text-align:left\">name</th><th class=\"bottomBorder\" style=\"text-align:left\">type</th><th class=\"bottomBorder\" style=\"text-align:left\">count</th><th class=\"bottomBorder\" style=\"text-align:left\">unique</th><th class=\"bottomBorder\" style=\"text-align:left\">nulls</th><th class=\"bottomBorder\" style=\"text-align:left\">top</th><th class=\"bottomBorder\" style=\"text-align:left\">freq</th><th class=\"bottomBorder\" style=\"text-align:left\">mean</th><th class=\"bottomBorder\" style=\"text-align:left\">std</th><th class=\"bottomBorder\" style=\"text-align:left\">min</th><th class=\"bottomBorder\" style=\"text-align:left\">median</th><th class=\"bottomBorder\" style=\"text-align:left\">max</th></tr></thead><tbody><tr><td  style=\"vertical-align:top\">full_name</td><td  style=\"vertical-align:top\">String</td><td  style=\"vertical-align:top\">562</td><td  style=\"vertical-align:top\">562</td><td  style=\"vertical-align:top\">0</td><td  style=\"vertical-align:top\">JetBrains/JPS</td><td  style=\"vertical-align:top\">1</td><td  style=\"vertical-align:top\">null</td><td  style=\"vertical-align:top\">null</td><td  style=\"vertical-align:top\">JetBrains/Android-Tuts-Samples</td><td  style=\"vertical-align:top\">JetBrains/lightbeam</td><td  style=\"vertical-align:top\">JetBrains/ztools</td></tr><tr><td  style=\"vertical-align:top\">html_url</td><td  style=\"vertical-align:top\">URL</td><td  style=\"vertical-align:top\">562</td><td  style=\"vertical-align:top\">562</td><td  style=\"vertical-align:top\">0</td><td  style=\"vertical-align:top\">https://github.com/JetBrains/JPS</td><td  style=\"vertical-align:top\">1</td><td  style=\"vertical-align:top\">null</td><td  style=\"vertical-align:top\">null</td><td  style=\"vertical-align:top\">null</td><td  style=\"vertical-align:top\">null</td><td  style=\"vertical-align:top\">null</td></tr><tr><td  style=\"vertical-align:top\">stargazers_count</td><td  style=\"vertical-align:top\">Int</td><td  style=\"vertical-align:top\">562</td><td  style=\"vertical-align:top\">165</td><td  style=\"vertical-align:top\">0</td><td  style=\"vertical-align:top\">1</td><td  style=\"vertical-align:top\">100</td><td  style=\"vertical-align:top\">244,759786</td><td  style=\"vertical-align:top\">1862,801982</td><td  style=\"vertical-align:top\">0</td><td  style=\"vertical-align:top\">8</td><td  style=\"vertical-align:top\">39402</td></tr><tr><td  style=\"vertical-align:top\">topics</td><td  style=\"vertical-align:top\">String</td><td  style=\"vertical-align:top\">562</td><td  style=\"vertical-align:top\">145</td><td  style=\"vertical-align:top\">0</td><td  style=\"vertical-align:top\">[]</td><td  style=\"vertical-align:top\">401</td><td  style=\"vertical-align:top\">null</td><td  style=\"vertical-align:top\">null</td><td  style=\"vertical-align:top\">[2d, graphics, java, skia]</td><td  style=\"vertical-align:top\">[]</td><td  style=\"vertical-align:top\">[youtrack, youtrack-workflow]</td></tr><tr><td  style=\"vertical-align:top\">watchers</td><td  style=\"vertical-align:top\">Int</td><td  style=\"vertical-align:top\">562</td><td  style=\"vertical-align:top\">165</td><td  style=\"vertical-align:top\">0</td><td  style=\"vertical-align:top\">1</td><td  style=\"vertical-align:top\">100</td><td  style=\"vertical-align:top\">244,759786</td><td  style=\"vertical-align:top\">1862,801982</td><td  style=\"vertical-align:top\">0</td><td  style=\"vertical-align:top\">8</td><td  style=\"vertical-align:top\">39402</td></tr></tbody></table>\n",
       "        </body>\n",
       "        <script>\n",
       "            document.getElementById(\"static_df_536870917\").style.display = \"none\";\n",
       "        </script>\n",
       "        </html>"
      ],
      "application/kotlindataframe+json": "{\"$version\":\"2.1.1\",\"metadata\":{\"columns\":[\"name\",\"type\",\"count\",\"unique\",\"nulls\",\"top\",\"freq\",\"mean\",\"std\",\"min\",\"median\",\"max\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"},{\"kind\":\"ValueColumn\",\"type\":\"java.io.Serializable\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double?\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double?\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Comparable<*>?\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Comparable<*>?\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Comparable<*>?\"}],\"nrow\":5,\"ncol\":12},\"kotlin_dataframe\":[{\"name\":\"full_name\",\"type\":\"String\",\"count\":562,\"unique\":562,\"nulls\":0,\"top\":\"JetBrains/JPS\",\"freq\":1,\"mean\":null,\"std\":null,\"min\":\"JetBrains/Android-Tuts-Samples\",\"median\":\"JetBrains/lightbeam\",\"max\":\"JetBrains/ztools\"},{\"name\":\"html_url\",\"type\":\"URL\",\"count\":562,\"unique\":562,\"nulls\":0,\"top\":\"https://github.com/JetBrains/JPS\",\"freq\":1,\"mean\":null,\"std\":null,\"min\":null,\"median\":null,\"max\":null},{\"name\":\"stargazers_count\",\"type\":\"Int\",\"count\":562,\"unique\":165,\"nulls\":0,\"top\":\"1\",\"freq\":100,\"mean\":244.75978647686833,\"std\":1862.8019819171673,\"min\":\"0\",\"median\":\"8\",\"max\":\"39402\"},{\"name\":\"topics\",\"type\":\"String\",\"count\":562,\"unique\":145,\"nulls\":0,\"top\":\"[]\",\"freq\":401,\"mean\":null,\"std\":null,\"min\":\"[2d, graphics, java, skia]\",\"median\":\"[]\",\"max\":\"[youtrack, youtrack-workflow]\"},{\"name\":\"watchers\",\"type\":\"Int\",\"count\":562,\"unique\":165,\"nulls\":0,\"top\":\"1\",\"freq\":100,\"mean\":244.75978647686833,\"std\":1862.8019819171673,\"min\":\"0\",\"median\":\"8\",\"max\":\"39402\"}]}"
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 4
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "## Select Columns"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "Kotlin DataFrame features a typesafe Columns Selection DSL, enabling flexible and safe selection of any combination of columns.\n",
    "Column selectors are widely used across operations — one of the simplest examples is `.select { }`, which returns a new DataFrame with only the columns chosen in Columns Selection expression.\n",
    "\n",
    "After executing the cell where a `DataFrame` variable is declared, an extension with properties for its columns is automatically generated.\n",
    "These properties can then be used in the Columns Selection DSL expression for typesafe and convenient column access.\n",
    "\n",
    "Select some columns:"
   ]
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-01T13:42:32.986689Z",
     "start_time": "2025-05-01T13:42:32.810436Z"
    }
   },
   "cell_type": "code",
   "source": [
    "// Select \"full_name\", \"stargazers_count\" and \"topics\" columns\n",
    "val dfSelected = df.select { full_name and stargazers_count and topics }\n",
    "dfSelected"
   ],
   "outputs": [
    {
     "data": {
      "text/html": [
       "            <iframe onload=\"o_resize_iframe_out_5()\" style=\"width:100%;\" class=\"result_container\" id=\"iframe_out_5\" frameBorder=\"0\" srcdoc=\"        &lt;html theme='dark'&gt;\n",
       "        &lt;head&gt;\n",
       "            &lt;style type=&quot;text&sol;css&quot;&gt;\n",
       "                :root {\n",
       "    --background: #fff;\n",
       "    --background-odd: #f5f5f5;\n",
       "    --background-hover: #d9edfd;\n",
       "    --header-text-color: #474747;\n",
       "    --text-color: #848484;\n",
       "    --text-color-dark: #000;\n",
       "    --text-color-medium: #737373;\n",
       "    --text-color-pale: #b3b3b3;\n",
       "    --inner-border-color: #aaa;\n",
       "    --bold-border-color: #000;\n",
       "    --link-color: #296eaa;\n",
       "    --link-color-pale: #296eaa;\n",
       "    --link-hover: #1a466c;\n",
       "}\n",
       "\n",
       ":root[theme=&quot;dark&quot;], :root [data-jp-theme-light=&quot;false&quot;], .dataframe_dark{\n",
       "    --background: #303030;\n",
       "    --background-odd: #3c3c3c;\n",
       "    --background-hover: #464646;\n",
       "    --header-text-color: #dddddd;\n",
       "    --text-color: #b3b3b3;\n",
       "    --text-color-dark: #dddddd;\n",
       "    --text-color-medium: #b2b2b2;\n",
       "    --text-color-pale: #737373;\n",
       "    --inner-border-color: #707070;\n",
       "    --bold-border-color: #777777;\n",
       "    --link-color: #008dc0;\n",
       "    --link-color-pale: #97e1fb;\n",
       "    --link-hover: #00688e;\n",
       "}\n",
       "\n",
       "p.dataframe_description {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe {\n",
       "    font-family: &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif;\n",
       "    font-size: 12px;\n",
       "    background-color: var(--background);\n",
       "    color: var(--text-color-dark);\n",
       "    border: none;\n",
       "    border-collapse: collapse;\n",
       "}\n",
       "\n",
       "table.dataframe th, td {\n",
       "    padding: 6px;\n",
       "    border: 1px solid transparent;\n",
       "    text-align: left;\n",
       "}\n",
       "\n",
       "table.dataframe th {\n",
       "    background-color: var(--background);\n",
       "    color: var(--header-text-color);\n",
       "}\n",
       "\n",
       "table.dataframe td {\n",
       "    vertical-align: top;\n",
       "    white-space: nowrap;\n",
       "}\n",
       "\n",
       "table.dataframe th.bottomBorder {\n",
       "    border-bottom-color: var(--bold-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe tbody &gt; tr:nth-child(odd) {\n",
       "    background: var(--background-odd);\n",
       "}\n",
       "\n",
       "table.dataframe tbody &gt; tr:nth-child(even) {\n",
       "    background: var(--background);\n",
       "}\n",
       "\n",
       "table.dataframe tbody &gt; tr:hover {\n",
       "    background: var(--background-hover);\n",
       "}\n",
       "\n",
       "table.dataframe a {\n",
       "    cursor: pointer;\n",
       "    color: var(--link-color);\n",
       "    text-decoration: none;\n",
       "}\n",
       "\n",
       "table.dataframe tr:hover &gt; td a {\n",
       "    color: var(--link-color-pale);\n",
       "}\n",
       "\n",
       "table.dataframe a:hover {\n",
       "    color: var(--link-hover);\n",
       "    text-decoration: underline;\n",
       "}\n",
       "\n",
       "table.dataframe img {\n",
       "    max-width: fit-content;\n",
       "}\n",
       "\n",
       "table.dataframe th.complex {\n",
       "    background-color: var(--background);\n",
       "    border: 1px solid var(--background);\n",
       "}\n",
       "\n",
       "table.dataframe .leftBorder {\n",
       "    border-left-color: var(--inner-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe .rightBorder {\n",
       "    border-right-color: var(--inner-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe .rightAlign {\n",
       "    text-align: right;\n",
       "}\n",
       "\n",
       "table.dataframe .expanderSvg {\n",
       "    width: 8px;\n",
       "    height: 8px;\n",
       "    margin-right: 3px;\n",
       "}\n",
       "\n",
       "table.dataframe .expander {\n",
       "    display: flex;\n",
       "    align-items: center;\n",
       "}\n",
       "\n",
       "&sol;* formatting *&sol;\n",
       "\n",
       "table.dataframe .null {\n",
       "    color: var(--text-color-pale);\n",
       "}\n",
       "\n",
       "table.dataframe .structural {\n",
       "    color: var(--text-color-medium);\n",
       "    font-weight: bold;\n",
       "}\n",
       "\n",
       "table.dataframe .dataFrameCaption {\n",
       "    font-weight: bold;\n",
       "}\n",
       "\n",
       "table.dataframe .numbers {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe td:hover .formatted .structural, .null {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe tr:hover .formatted .structural, .null {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "\n",
       ":root {\n",
       "    --scroll-bg: #f5f5f5;\n",
       "    --scroll-fg: #b3b3b3;\n",
       "}\n",
       ":root[theme=&quot;dark&quot;], :root [data-jp-theme-light=&quot;false&quot;]{\n",
       "    --scroll-bg: #3c3c3c;\n",
       "    --scroll-fg: #97e1fb;\n",
       "}\n",
       "body {\n",
       "    scrollbar-color: var(--scroll-fg) var(--scroll-bg);\n",
       "}\n",
       "body::-webkit-scrollbar {\n",
       "    width: 10px; &sol;* Mostly for vertical scrollbars *&sol;\n",
       "    height: 10px; &sol;* Mostly for horizontal scrollbars *&sol;\n",
       "}\n",
       "body::-webkit-scrollbar-thumb {\n",
       "    background-color: var(--scroll-fg);\n",
       "}\n",
       "body::-webkit-scrollbar-track {\n",
       "    background-color: var(--scroll-bg);\n",
       "}\n",
       "            &lt;&sol;style&gt;\n",
       "        &lt;&sol;head&gt;\n",
       "        &lt;body&gt;\n",
       "            &lt;table class=&quot;dataframe&quot; id=&quot;df_536870920&quot;&gt;&lt;&sol;table&gt;\n",
       "\n",
       "&lt;p class=&quot;dataframe_description&quot;&gt;... showing only top 20 of 562 rows&lt;&sol;p&gt;&lt;p class=&quot;dataframe_description&quot;&gt;DataFrame: rowsCount = 562, columnsCount = 3&lt;&sol;p&gt;\n",
       "\n",
       "        &lt;&sol;body&gt;\n",
       "        &lt;script&gt;\n",
       "            (function () {\n",
       "    window.DataFrame = window.DataFrame || new (function () {\n",
       "        this.addTable = function (df) {\n",
       "            let cols = df.cols;\n",
       "            for (let i = 0; i &lt; cols.length; i++) {\n",
       "                for (let c of cols[i].children) {\n",
       "                    cols[c].parent = i;\n",
       "                }\n",
       "            }\n",
       "            df.nrow = 0\n",
       "            for (let i = 0; i &lt; df.cols.length; i++) {\n",
       "                if (df.cols[i].values.length &gt; df.nrow) df.nrow = df.cols[i].values.length\n",
       "            }\n",
       "            if (df.id === df.rootId) {\n",
       "                df.expandedFrames = new Set()\n",
       "                df.childFrames = {}\n",
       "                const table = this.getTableElement(df.id)\n",
       "                table.df = df\n",
       "                for (let i = 0; i &lt; df.cols.length; i++) {\n",
       "                    let col = df.cols[i]\n",
       "                    if (col.parent === undefined &amp;&amp; col.children.length &gt; 0) col.expanded = true\n",
       "                }\n",
       "            } else {\n",
       "                const rootDf = this.getTableData(df.rootId)\n",
       "                rootDf.childFrames[df.id] = df\n",
       "            }\n",
       "        }\n",
       "\n",
       "        this.computeRenderData = function (df) {\n",
       "            let result = []\n",
       "            let pos = 0\n",
       "            for (let col = 0; col &lt; df.cols.length; col++) {\n",
       "                if (df.cols[col].parent === undefined)\n",
       "                    pos += this.computeRenderDataRec(df.cols, col, pos, 0, result, false, false)\n",
       "            }\n",
       "            for (let i = 0; i &lt; result.length; i++) {\n",
       "                let row = result[i]\n",
       "                for (let j = 0; j &lt; row.length; j++) {\n",
       "                    let cell = row[j]\n",
       "                    if (j === 0)\n",
       "                        cell.leftBd = false\n",
       "                    if (j &lt; row.length - 1) {\n",
       "                        let nextData = row[j + 1]\n",
       "                        if (nextData.leftBd) cell.rightBd = true\n",
       "                        else if (cell.rightBd) nextData.leftBd = true\n",
       "                    } else cell.rightBd = false\n",
       "                }\n",
       "            }\n",
       "            return result\n",
       "        }\n",
       "\n",
       "        this.computeRenderDataRec = function (cols, colId, pos, depth, result, leftBorder, rightBorder) {\n",
       "            if (result.length === depth) {\n",
       "                const array = [];\n",
       "                if (pos &gt; 0) {\n",
       "                    let j = 0\n",
       "                    for (let i = 0; j &lt; pos; i++) {\n",
       "                        let c = result[depth - 1][i]\n",
       "                        j += c.span\n",
       "                        let copy = Object.assign({empty: true}, c)\n",
       "                        array.push(copy)\n",
       "                    }\n",
       "                }\n",
       "                result.push(array)\n",
       "            }\n",
       "            const col = cols[colId];\n",
       "            let size = 0;\n",
       "            if (col.expanded) {\n",
       "                let childPos = pos\n",
       "                for (let i = 0; i &lt; col.children.length; i++) {\n",
       "                    let child = col.children[i]\n",
       "                    let childLeft = i === 0 &amp;&amp; (col.children.length &gt; 1 || leftBorder)\n",
       "                    let childRight = i === col.children.length - 1 &amp;&amp; (col.children.length &gt; 1 || rightBorder)\n",
       "                    let childSize = this.computeRenderDataRec(cols, child, childPos, depth + 1, result, childLeft, childRight)\n",
       "                    childPos += childSize\n",
       "                    size += childSize\n",
       "                }\n",
       "            } else {\n",
       "                for (let i = depth + 1; i &lt; result.length; i++)\n",
       "                    result[i].push({id: colId, span: 1, leftBd: leftBorder, rightBd: rightBorder, empty: true})\n",
       "                size = 1\n",
       "            }\n",
       "            let left = leftBorder\n",
       "            let right = rightBorder\n",
       "            if (size &gt; 1) {\n",
       "                left = true\n",
       "                right = true\n",
       "            }\n",
       "            result[depth].push({id: colId, span: size, leftBd: left, rightBd: right})\n",
       "            return size\n",
       "        }\n",
       "\n",
       "        this.getTableElement = function (id) {\n",
       "            return document.getElementById(&quot;df_&quot; + id)\n",
       "        }\n",
       "\n",
       "        this.getTableData = function (id) {\n",
       "            return this.getTableElement(id).df\n",
       "        }\n",
       "\n",
       "        this.createExpander = function (isExpanded) {\n",
       "            const svgNs = &quot;http:&sol;&sol;www.w3.org&sol;2000&sol;svg&quot;\n",
       "            let svg = document.createElementNS(svgNs, &quot;svg&quot;)\n",
       "            svg.classList.add(&quot;expanderSvg&quot;)\n",
       "            let path = document.createElementNS(svgNs, &quot;path&quot;)\n",
       "            if (isExpanded) {\n",
       "                svg.setAttribute(&quot;viewBox&quot;, &quot;0 -2 8 8&quot;)\n",
       "                path.setAttribute(&quot;d&quot;, &quot;M1 0 l-1 1 4 4 4 -4 -1 -1 -3 3Z&quot;)\n",
       "            } else {\n",
       "                svg.setAttribute(&quot;viewBox&quot;, &quot;-2 0 8 8&quot;)\n",
       "                path.setAttribute(&quot;d&quot;, &quot;M1 0 l-1 1 3 3 -3 3 1 1 4 -4Z&quot;)\n",
       "            }\n",
       "            path.setAttribute(&quot;fill&quot;, &quot;currentColor&quot;)\n",
       "            svg.appendChild(path)\n",
       "            return svg\n",
       "        }\n",
       "\n",
       "        this.renderTable = function (id) {\n",
       "\n",
       "            let table = this.getTableElement(id)\n",
       "\n",
       "            if (table === null) return\n",
       "\n",
       "            table.innerHTML = &quot;&quot;\n",
       "\n",
       "            let df = table.df\n",
       "            let rootDf = df.rootId === df.id ? df : this.getTableData(df.rootId)\n",
       "\n",
       "            &sol;&sol; header\n",
       "            let header = document.createElement(&quot;thead&quot;)\n",
       "            table.appendChild(header)\n",
       "\n",
       "            let renderData = this.computeRenderData(df)\n",
       "            for (let j = 0; j &lt; renderData.length; j++) {\n",
       "                let rowData = renderData[j]\n",
       "                let tr = document.createElement(&quot;tr&quot;);\n",
       "                let isLastRow = j === renderData.length - 1\n",
       "                header.appendChild(tr);\n",
       "                for (let i = 0; i &lt; rowData.length; i++) {\n",
       "                    let cell = rowData[i]\n",
       "                    let th = document.createElement(&quot;th&quot;);\n",
       "                    th.setAttribute(&quot;colspan&quot;, cell.span)\n",
       "                    let colId = cell.id\n",
       "                    let col = df.cols[colId];\n",
       "                    if (!cell.empty) {\n",
       "                        if (col.children.length === 0) {\n",
       "                            th.innerHTML = col.name\n",
       "                        } else {\n",
       "                            let link = document.createElement(&quot;a&quot;)\n",
       "                            link.className = &quot;expander&quot;\n",
       "                            let that = this\n",
       "                            link.onclick = function () {\n",
       "                                col.expanded = !col.expanded\n",
       "                                that.renderTable(id)\n",
       "                            }\n",
       "                            link.appendChild(this.createExpander(col.expanded))\n",
       "                            link.innerHTML += col.name\n",
       "                            th.appendChild(link)\n",
       "                        }\n",
       "                    }\n",
       "                    let classes = (cell.leftBd ? &quot; leftBorder&quot; : &quot;&quot;) + (cell.rightBd ? &quot; rightBorder&quot; : &quot;&quot;)\n",
       "                    if (col.rightAlign)\n",
       "                        classes += &quot; rightAlign&quot;\n",
       "                    if (isLastRow)\n",
       "                        classes += &quot; bottomBorder&quot;\n",
       "                    if (classes.length &gt; 0)\n",
       "                        th.setAttribute(&quot;class&quot;, classes)\n",
       "                    tr.appendChild(th)\n",
       "                }\n",
       "            }\n",
       "\n",
       "            &sol;&sol; body\n",
       "            let body = document.createElement(&quot;tbody&quot;)\n",
       "            table.appendChild(body)\n",
       "\n",
       "            let columns = renderData.pop()\n",
       "            for (let row = 0; row &lt; df.nrow; row++) {\n",
       "                let tr = document.createElement(&quot;tr&quot;);\n",
       "                body.appendChild(tr)\n",
       "                for (let i = 0; i &lt; columns.length; i++) {\n",
       "                    let cell = columns[i]\n",
       "                    let td = document.createElement(&quot;td&quot;);\n",
       "                    let colId = cell.id\n",
       "                    let col = df.cols[colId]\n",
       "                    let classes = (cell.leftBd ? &quot; leftBorder&quot; : &quot;&quot;) + (cell.rightBd ? &quot; rightBorder&quot; : &quot;&quot;)\n",
       "                    if (col.rightAlign)\n",
       "                        classes += &quot; rightAlign&quot;\n",
       "                    if (classes.length &gt; 0)\n",
       "                        td.setAttribute(&quot;class&quot;, classes)\n",
       "                    tr.appendChild(td)\n",
       "                    let value = col.values[row]\n",
       "                    if (value.frameId !== undefined) {\n",
       "                        let frameId = value.frameId\n",
       "                        let expanded = rootDf.expandedFrames.has(frameId)\n",
       "                        let link = document.createElement(&quot;a&quot;)\n",
       "                        link.className = &quot;expander&quot;\n",
       "                        let that = this\n",
       "                        link.onclick = function () {\n",
       "                            if (rootDf.expandedFrames.has(frameId))\n",
       "                                rootDf.expandedFrames.delete(frameId)\n",
       "                            else rootDf.expandedFrames.add(frameId)\n",
       "                            that.renderTable(id)\n",
       "                        }\n",
       "                        link.appendChild(this.createExpander(expanded))\n",
       "                        link.innerHTML += value.value\n",
       "                        if (expanded) {\n",
       "                            td.appendChild(link)\n",
       "                            td.appendChild(document.createElement(&quot;p&quot;))\n",
       "                            const childTable = document.createElement(&quot;table&quot;)\n",
       "                            childTable.className = &quot;dataframe&quot;\n",
       "                            childTable.id = &quot;df_&quot; + frameId\n",
       "                            let childDf = rootDf.childFrames[frameId]\n",
       "                            childTable.df = childDf\n",
       "                            td.appendChild(childTable)\n",
       "                            this.renderTable(frameId)\n",
       "                            if (childDf.nrow !== childDf.totalRows) {\n",
       "                                const footer = document.createElement(&quot;p&quot;)\n",
       "                                footer.innerText = `... showing only top ${childDf.nrow} of ${childDf.totalRows} rows`\n",
       "                                td.appendChild(footer)\n",
       "                            }\n",
       "                        } else {\n",
       "                            td.appendChild(link)\n",
       "                        }\n",
       "                    } else if (value.style !== undefined) {\n",
       "                        td.innerHTML = value.value\n",
       "                        td.setAttribute(&quot;style&quot;, value.style)\n",
       "                    } else td.innerHTML = value\n",
       "                    this.nodeScriptReplace(td)\n",
       "                }\n",
       "            }\n",
       "        }\n",
       "\n",
       "        this.nodeScriptReplace = function (node) {\n",
       "            if (this.nodeScriptIs(node) === true) {\n",
       "                node.parentNode.replaceChild(this.nodeScriptClone(node), node);\n",
       "            } else {\n",
       "                let i = -1, children = node.childNodes;\n",
       "                while (++i &lt; children.length) {\n",
       "                    this.nodeScriptReplace(children[i]);\n",
       "                }\n",
       "            }\n",
       "\n",
       "            return node;\n",
       "        }\n",
       "\n",
       "        this.nodeScriptClone = function (node) {\n",
       "            let script = document.createElement(&quot;script&quot;);\n",
       "            script.text = node.innerHTML;\n",
       "\n",
       "            let i = -1, attrs = node.attributes, attr;\n",
       "            while (++i &lt; attrs.length) {\n",
       "                script.setAttribute((attr = attrs[i]).name, attr.value);\n",
       "            }\n",
       "            return script;\n",
       "        }\n",
       "\n",
       "        this.nodeScriptIs = function (node) {\n",
       "            return node.tagName === 'SCRIPT';\n",
       "        }\n",
       "    })()\n",
       "\n",
       "    window.call_DataFrame = function (f) {\n",
       "        return f();\n",
       "    };\n",
       "\n",
       "    let funQueue = window[&quot;kotlinQueues&quot;] &amp;&amp; window[&quot;kotlinQueues&quot;][&quot;DataFrame&quot;];\n",
       "    if (funQueue) {\n",
       "        funQueue.forEach(function (f) {\n",
       "            f();\n",
       "        });\n",
       "        funQueue = [];\n",
       "    }\n",
       "})()\n",
       "\n",
       "&sol;*&lt;!--*&sol;\n",
       "call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: &quot;&lt;span title=&bsol;&quot;full_name: String&bsol;&quot;&gt;full_name&lt;&sol;span&gt;&quot;, children: [], rightAlign: false, values: [&quot;JetBrains&sol;JPS&quot;,&quot;JetBrains&sol;YouTrackSharp&quot;,&quot;JetBrains&sol;colorSchemeTool&quot;,&quot;JetBrains&sol;ideavim&quot;,&quot;JetBrains&sol;youtrack-vcs-hooks&quot;,&quot;JetBrains&sol;youtrack-rest-ruby-library&quot;,&quot;JetBrains&sol;emacs4ij&quot;,&quot;JetBrains&sol;codereview4intellij&quot;,&quot;JetBrains&sol;teamcity-nuget-support&quot;,&quot;JetBrains&sol;Grammar-Kit&quot;,&quot;JetBrains&sol;intellij-starteam-plugin&quot;,&quot;JetBrains&sol;la-clojure&quot;,&quot;JetBrains&sol;MPS&quot;,&quot;JetBrains&sol;intellij-community&quot;,&quot;JetBrains&sol;TeamCity.ServiceMessages&quot;,&quot;JetBrains&sol;youtrack-rest-python-library&quot;,&quot;JetBrains&sol;intellij-scala&quot;,&quot;JetBrains&sol;teamcity-messages&quot;,&quot;JetBrains&sol;teamcity-cpp&quot;,&quot;JetBrains&sol;kotlin&quot;] }, \n",
       "{ name: &quot;&lt;span title=&bsol;&quot;stargazers_count: Int&bsol;&quot;&gt;stargazers_count&lt;&sol;span&gt;&quot;, children: [], rightAlign: true, values: [&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;23&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;115&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;290&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;6120&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;5&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;8&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;47&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;11&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;41&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;534&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;6&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;218&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;1241&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;12926&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;39&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;118&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;1066&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;125&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;27&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;39402&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;] }, \n",
       "{ name: &quot;&lt;span title=&bsol;&quot;topics: String&bsol;&quot;&gt;topics&lt;&sol;span&gt;&quot;, children: [], rightAlign: false, values: [&quot;[]&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;[jetbrains, jetbrains-youtrack, youtrack, youtrack-api]&bsol;&quot;&gt;[jetbrains, jetbrains-youtrack, youtr&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;[]&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;[ideavim, intellij, intellij-platform, jb-official, kotlin, vim, vim-emulator]&bsol;&quot;&gt;[ideavim, intellij, intellij-platform&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;[]&quot;,&quot;[]&quot;,&quot;[]&quot;,&quot;[]&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;[nuget, nuget-feed, teamcity, teamcity-plugin]&bsol;&quot;&gt;[nuget, nuget-feed, teamcity, teamcit&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;[]&quot;,&quot;[]&quot;,&quot;[]&quot;,&quot;[domain-specific-language, dsl]&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;[code-editor, ide, intellij, intellij-community, intellij-platform]&bsol;&quot;&gt;[code-editor, ide, intellij, intellij&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;[c-sharp, teamcity, teamcity-service-messages]&bsol;&quot;&gt;[c-sharp, teamcity, teamcity-service-&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;[]&quot;,&quot;[intellij-idea, intellij-plugin, scala]&quot;,&quot;[]&quot;,&quot;[]&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;[compiler, gradle-plugin, intellij-plugin, kotlin, kotlin-library, maven-plugin, programming-language]&bsol;&quot;&gt;[compiler, gradle-plugin, intellij-pl&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;] }, \n",
       "], id: 536870920, rootId: 536870920, totalRows: 562 } ) });\n",
       "&sol;*--&gt;*&sol;\n",
       "\n",
       "call_DataFrame(function() { DataFrame.renderTable(536870920) });\n",
       "\n",
       "\n",
       "        &lt;&sol;script&gt;\n",
       "        &lt;&sol;html&gt;\"></iframe>\n",
       "            <script>\n",
       "                function o_resize_iframe_out_5() {\n",
       "                    let elem = document.getElementById(\"iframe_out_5\");\n",
       "                    resize_iframe_out_5(elem);\n",
       "                    setInterval(resize_iframe_out_5, 5000, elem);\n",
       "                }\n",
       "                function resize_iframe_out_5(el) {\n",
       "                    let h = el.contentWindow.document.body.scrollHeight;\n",
       "                    el.height = h === 0 ? 0 : h + 41;\n",
       "                }\n",
       "            </script>        <html theme='dark'>\n",
       "        <head>\n",
       "            <style type=\"text/css\">\n",
       "                :root {\n",
       "    --background: #fff;\n",
       "    --background-odd: #f5f5f5;\n",
       "    --background-hover: #d9edfd;\n",
       "    --header-text-color: #474747;\n",
       "    --text-color: #848484;\n",
       "    --text-color-dark: #000;\n",
       "    --text-color-medium: #737373;\n",
       "    --text-color-pale: #b3b3b3;\n",
       "    --inner-border-color: #aaa;\n",
       "    --bold-border-color: #000;\n",
       "    --link-color: #296eaa;\n",
       "    --link-color-pale: #296eaa;\n",
       "    --link-hover: #1a466c;\n",
       "}\n",
       "\n",
       ":root[theme=\"dark\"], :root [data-jp-theme-light=\"false\"], .dataframe_dark{\n",
       "    --background: #303030;\n",
       "    --background-odd: #3c3c3c;\n",
       "    --background-hover: #464646;\n",
       "    --header-text-color: #dddddd;\n",
       "    --text-color: #b3b3b3;\n",
       "    --text-color-dark: #dddddd;\n",
       "    --text-color-medium: #b2b2b2;\n",
       "    --text-color-pale: #737373;\n",
       "    --inner-border-color: #707070;\n",
       "    --bold-border-color: #777777;\n",
       "    --link-color: #008dc0;\n",
       "    --link-color-pale: #97e1fb;\n",
       "    --link-hover: #00688e;\n",
       "}\n",
       "\n",
       "p.dataframe_description {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe {\n",
       "    font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n",
       "    font-size: 12px;\n",
       "    background-color: var(--background);\n",
       "    color: var(--text-color-dark);\n",
       "    border: none;\n",
       "    border-collapse: collapse;\n",
       "}\n",
       "\n",
       "table.dataframe th, td {\n",
       "    padding: 6px;\n",
       "    border: 1px solid transparent;\n",
       "    text-align: left;\n",
       "}\n",
       "\n",
       "table.dataframe th {\n",
       "    background-color: var(--background);\n",
       "    color: var(--header-text-color);\n",
       "}\n",
       "\n",
       "table.dataframe td {\n",
       "    vertical-align: top;\n",
       "    white-space: nowrap;\n",
       "}\n",
       "\n",
       "table.dataframe th.bottomBorder {\n",
       "    border-bottom-color: var(--bold-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe tbody > tr:nth-child(odd) {\n",
       "    background: var(--background-odd);\n",
       "}\n",
       "\n",
       "table.dataframe tbody > tr:nth-child(even) {\n",
       "    background: var(--background);\n",
       "}\n",
       "\n",
       "table.dataframe tbody > tr:hover {\n",
       "    background: var(--background-hover);\n",
       "}\n",
       "\n",
       "table.dataframe a {\n",
       "    cursor: pointer;\n",
       "    color: var(--link-color);\n",
       "    text-decoration: none;\n",
       "}\n",
       "\n",
       "table.dataframe tr:hover > td a {\n",
       "    color: var(--link-color-pale);\n",
       "}\n",
       "\n",
       "table.dataframe a:hover {\n",
       "    color: var(--link-hover);\n",
       "    text-decoration: underline;\n",
       "}\n",
       "\n",
       "table.dataframe img {\n",
       "    max-width: fit-content;\n",
       "}\n",
       "\n",
       "table.dataframe th.complex {\n",
       "    background-color: var(--background);\n",
       "    border: 1px solid var(--background);\n",
       "}\n",
       "\n",
       "table.dataframe .leftBorder {\n",
       "    border-left-color: var(--inner-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe .rightBorder {\n",
       "    border-right-color: var(--inner-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe .rightAlign {\n",
       "    text-align: right;\n",
       "}\n",
       "\n",
       "table.dataframe .expanderSvg {\n",
       "    width: 8px;\n",
       "    height: 8px;\n",
       "    margin-right: 3px;\n",
       "}\n",
       "\n",
       "table.dataframe .expander {\n",
       "    display: flex;\n",
       "    align-items: center;\n",
       "}\n",
       "\n",
       "/* formatting */\n",
       "\n",
       "table.dataframe .null {\n",
       "    color: var(--text-color-pale);\n",
       "}\n",
       "\n",
       "table.dataframe .structural {\n",
       "    color: var(--text-color-medium);\n",
       "    font-weight: bold;\n",
       "}\n",
       "\n",
       "table.dataframe .dataFrameCaption {\n",
       "    font-weight: bold;\n",
       "}\n",
       "\n",
       "table.dataframe .numbers {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe td:hover .formatted .structural, .null {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe tr:hover .formatted .structural, .null {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "\n",
       "            </style>\n",
       "        </head>\n",
       "        <body>\n",
       "            <table class=\"dataframe\" id=\"static_df_536870921\"><thead><tr><th class=\"bottomBorder\" style=\"text-align:left\">full_name</th><th class=\"bottomBorder\" style=\"text-align:left\">stargazers_count</th><th class=\"bottomBorder\" style=\"text-align:left\">topics</th></tr></thead><tbody><tr><td  style=\"vertical-align:top\">JetBrains/JPS</td><td  style=\"vertical-align:top\">23</td><td  style=\"vertical-align:top\">[]</td></tr><tr><td  style=\"vertical-align:top\">JetBrains/YouTrackSharp</td><td  style=\"vertical-align:top\">115</td><td  style=\"vertical-align:top\">[jetbrains, jetbrains-youtrack, youtr<span class=\"structural\">...</span></td></tr><tr><td  style=\"vertical-align:top\">JetBrains/colorSchemeTool</td><td  style=\"vertical-align:top\">290</td><td  style=\"vertical-align:top\">[]</td></tr><tr><td  style=\"vertical-align:top\">JetBrains/ideavim</td><td  style=\"vertical-align:top\">6120</td><td  style=\"vertical-align:top\">[ideavim, intellij, intellij-platform<span class=\"structural\">...</span></td></tr><tr><td  style=\"vertical-align:top\">JetBrains/youtrack-vcs-hooks</td><td  style=\"vertical-align:top\">5</td><td  style=\"vertical-align:top\">[]</td></tr><tr><td  style=\"vertical-align:top\">JetBrains/youtrack-rest-ruby-library</td><td  style=\"vertical-align:top\">8</td><td  style=\"vertical-align:top\">[]</td></tr><tr><td  style=\"vertical-align:top\">JetBrains/emacs4ij</td><td  style=\"vertical-align:top\">47</td><td  style=\"vertical-align:top\">[]</td></tr><tr><td  style=\"vertical-align:top\">JetBrains/codereview4intellij</td><td  style=\"vertical-align:top\">11</td><td  style=\"vertical-align:top\">[]</td></tr><tr><td  style=\"vertical-align:top\">JetBrains/teamcity-nuget-support</td><td  style=\"vertical-align:top\">41</td><td  style=\"vertical-align:top\">[nuget, nuget-feed, teamcity, teamcit<span class=\"structural\">...</span></td></tr><tr><td  style=\"vertical-align:top\">JetBrains/Grammar-Kit</td><td  style=\"vertical-align:top\">534</td><td  style=\"vertical-align:top\">[]</td></tr><tr><td  style=\"vertical-align:top\">JetBrains/intellij-starteam-plugin</td><td  style=\"vertical-align:top\">6</td><td  style=\"vertical-align:top\">[]</td></tr><tr><td  style=\"vertical-align:top\">JetBrains/la-clojure</td><td  style=\"vertical-align:top\">218</td><td  style=\"vertical-align:top\">[]</td></tr><tr><td  style=\"vertical-align:top\">JetBrains/MPS</td><td  style=\"vertical-align:top\">1241</td><td  style=\"vertical-align:top\">[domain-specific-language, dsl]</td></tr><tr><td  style=\"vertical-align:top\">JetBrains/intellij-community</td><td  style=\"vertical-align:top\">12926</td><td  style=\"vertical-align:top\">[code-editor, ide, intellij, intellij<span class=\"structural\">...</span></td></tr><tr><td  style=\"vertical-align:top\">JetBrains/TeamCity.ServiceMessages</td><td  style=\"vertical-align:top\">39</td><td  style=\"vertical-align:top\">[c-sharp, teamcity, teamcity-service-<span class=\"structural\">...</span></td></tr><tr><td  style=\"vertical-align:top\">JetBrains/youtrack-rest-python-library</td><td  style=\"vertical-align:top\">118</td><td  style=\"vertical-align:top\">[]</td></tr><tr><td  style=\"vertical-align:top\">JetBrains/intellij-scala</td><td  style=\"vertical-align:top\">1066</td><td  style=\"vertical-align:top\">[intellij-idea, intellij-plugin, scala]</td></tr><tr><td  style=\"vertical-align:top\">JetBrains/teamcity-messages</td><td  style=\"vertical-align:top\">125</td><td  style=\"vertical-align:top\">[]</td></tr><tr><td  style=\"vertical-align:top\">JetBrains/teamcity-cpp</td><td  style=\"vertical-align:top\">27</td><td  style=\"vertical-align:top\">[]</td></tr><tr><td  style=\"vertical-align:top\">JetBrains/kotlin</td><td  style=\"vertical-align:top\">39402</td><td  style=\"vertical-align:top\">[compiler, gradle-plugin, intellij-pl<span class=\"structural\">...</span></td></tr></tbody></table>\n",
       "        </body>\n",
       "        <script>\n",
       "            document.getElementById(\"static_df_536870921\").style.display = \"none\";\n",
       "        </script>\n",
       "        </html>"
      ],
      "application/kotlindataframe+json": "{\"$version\":\"2.1.1\",\"metadata\":{\"columns\":[\"full_name\",\"stargazers_count\",\"topics\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"}],\"nrow\":562,\"ncol\":3},\"kotlin_dataframe\":[{\"full_name\":\"JetBrains/JPS\",\"stargazers_count\":23,\"topics\":\"[]\"},{\"full_name\":\"JetBrains/YouTrackSharp\",\"stargazers_count\":115,\"topics\":\"[jetbrains, jetbrains-youtrack, youtrack, youtrack-api]\"},{\"full_name\":\"JetBrains/colorSchemeTool\",\"stargazers_count\":290,\"topics\":\"[]\"},{\"full_name\":\"JetBrains/ideavim\",\"stargazers_count\":6120,\"topics\":\"[ideavim, intellij, intellij-platform, jb-official, kotlin, vim, vim-emulator]\"},{\"full_name\":\"JetBrains/youtrack-vcs-hooks\",\"stargazers_count\":5,\"topics\":\"[]\"},{\"full_name\":\"JetBrains/youtrack-rest-ruby-library\",\"stargazers_count\":8,\"topics\":\"[]\"},{\"full_name\":\"JetBrains/emacs4ij\",\"stargazers_count\":47,\"topics\":\"[]\"},{\"full_name\":\"JetBrains/codereview4intellij\",\"stargazers_count\":11,\"topics\":\"[]\"},{\"full_name\":\"JetBrains/teamcity-nuget-support\",\"stargazers_count\":41,\"topics\":\"[nuget, nuget-feed, teamcity, teamcity-plugin]\"},{\"full_name\":\"JetBrains/Grammar-Kit\",\"stargazers_count\":534,\"topics\":\"[]\"},{\"full_name\":\"JetBrains/intellij-starteam-plugin\",\"stargazers_count\":6,\"topics\":\"[]\"},{\"full_name\":\"JetBrains/la-clojure\",\"stargazers_count\":218,\"topics\":\"[]\"},{\"full_name\":\"JetBrains/MPS\",\"stargazers_count\":1241,\"topics\":\"[domain-specific-language, dsl]\"},{\"full_name\":\"JetBrains/intellij-community\",\"stargazers_count\":12926,\"topics\":\"[code-editor, ide, intellij, intellij-community, intellij-platform]\"},{\"full_name\":\"JetBrains/TeamCity.ServiceMessages\",\"stargazers_count\":39,\"topics\":\"[c-sharp, teamcity, teamcity-service-messages]\"},{\"full_name\":\"JetBrains/youtrack-rest-python-library\",\"stargazers_count\":118,\"topics\":\"[]\"},{\"full_name\":\"JetBrains/intellij-scala\",\"stargazers_count\":1066,\"topics\":\"[intellij-idea, intellij-plugin, scala]\"},{\"full_name\":\"JetBrains/teamcity-messages\",\"stargazers_count\":125,\"topics\":\"[]\"},{\"full_name\":\"JetBrains/teamcity-cpp\",\"stargazers_count\":27,\"topics\":\"[]\"},{\"full_name\":\"JetBrains/kotlin\",\"stargazers_count\":39402,\"topics\":\"[compiler, gradle-plugin, intellij-plugin, kotlin, kotlin-library, maven-plugin, programming-language]\"}]}"
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 5
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "## Raw Filtering"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "Some operations use `RowExpression`, i.e., expression that applies for all `DataFrame` rows. For example `.filter { }` that returns a new `DataFrame` with rows that satisfy a condition given by row expression.\n",
    "\n",
    "Inside a row expression, you can access the values of the current row by column names through auto-generated properties.\n",
    "Similar to the Columns Selection DSL, but in this case the properties represent actual values, not column references.\n",
    "\n",
    "Filter rows by \"stargazers_count\" value:"
   ]
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-01T13:42:33.082510Z",
     "start_time": "2025-05-01T13:42:33.031897Z"
    }
   },
   "cell_type": "code",
   "source": [
    "// Keep only rows where \"stargazers_count\" value is more than 1000\n",
    "val dfFiltered = dfSelected.filter { stargazers_count >= 1000 }\n",
    "dfFiltered"
   ],
   "outputs": [
    {
     "data": {
      "text/html": [
       "            <iframe onload=\"o_resize_iframe_out_7()\" style=\"width:100%;\" class=\"result_container\" id=\"iframe_out_7\" frameBorder=\"0\" srcdoc=\"        &lt;html theme='dark'&gt;\n",
       "        &lt;head&gt;\n",
       "            &lt;style type=&quot;text&sol;css&quot;&gt;\n",
       "                :root {\n",
       "    --background: #fff;\n",
       "    --background-odd: #f5f5f5;\n",
       "    --background-hover: #d9edfd;\n",
       "    --header-text-color: #474747;\n",
       "    --text-color: #848484;\n",
       "    --text-color-dark: #000;\n",
       "    --text-color-medium: #737373;\n",
       "    --text-color-pale: #b3b3b3;\n",
       "    --inner-border-color: #aaa;\n",
       "    --bold-border-color: #000;\n",
       "    --link-color: #296eaa;\n",
       "    --link-color-pale: #296eaa;\n",
       "    --link-hover: #1a466c;\n",
       "}\n",
       "\n",
       ":root[theme=&quot;dark&quot;], :root [data-jp-theme-light=&quot;false&quot;], .dataframe_dark{\n",
       "    --background: #303030;\n",
       "    --background-odd: #3c3c3c;\n",
       "    --background-hover: #464646;\n",
       "    --header-text-color: #dddddd;\n",
       "    --text-color: #b3b3b3;\n",
       "    --text-color-dark: #dddddd;\n",
       "    --text-color-medium: #b2b2b2;\n",
       "    --text-color-pale: #737373;\n",
       "    --inner-border-color: #707070;\n",
       "    --bold-border-color: #777777;\n",
       "    --link-color: #008dc0;\n",
       "    --link-color-pale: #97e1fb;\n",
       "    --link-hover: #00688e;\n",
       "}\n",
       "\n",
       "p.dataframe_description {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe {\n",
       "    font-family: &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif;\n",
       "    font-size: 12px;\n",
       "    background-color: var(--background);\n",
       "    color: var(--text-color-dark);\n",
       "    border: none;\n",
       "    border-collapse: collapse;\n",
       "}\n",
       "\n",
       "table.dataframe th, td {\n",
       "    padding: 6px;\n",
       "    border: 1px solid transparent;\n",
       "    text-align: left;\n",
       "}\n",
       "\n",
       "table.dataframe th {\n",
       "    background-color: var(--background);\n",
       "    color: var(--header-text-color);\n",
       "}\n",
       "\n",
       "table.dataframe td {\n",
       "    vertical-align: top;\n",
       "    white-space: nowrap;\n",
       "}\n",
       "\n",
       "table.dataframe th.bottomBorder {\n",
       "    border-bottom-color: var(--bold-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe tbody &gt; tr:nth-child(odd) {\n",
       "    background: var(--background-odd);\n",
       "}\n",
       "\n",
       "table.dataframe tbody &gt; tr:nth-child(even) {\n",
       "    background: var(--background);\n",
       "}\n",
       "\n",
       "table.dataframe tbody &gt; tr:hover {\n",
       "    background: var(--background-hover);\n",
       "}\n",
       "\n",
       "table.dataframe a {\n",
       "    cursor: pointer;\n",
       "    color: var(--link-color);\n",
       "    text-decoration: none;\n",
       "}\n",
       "\n",
       "table.dataframe tr:hover &gt; td a {\n",
       "    color: var(--link-color-pale);\n",
       "}\n",
       "\n",
       "table.dataframe a:hover {\n",
       "    color: var(--link-hover);\n",
       "    text-decoration: underline;\n",
       "}\n",
       "\n",
       "table.dataframe img {\n",
       "    max-width: fit-content;\n",
       "}\n",
       "\n",
       "table.dataframe th.complex {\n",
       "    background-color: var(--background);\n",
       "    border: 1px solid var(--background);\n",
       "}\n",
       "\n",
       "table.dataframe .leftBorder {\n",
       "    border-left-color: var(--inner-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe .rightBorder {\n",
       "    border-right-color: var(--inner-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe .rightAlign {\n",
       "    text-align: right;\n",
       "}\n",
       "\n",
       "table.dataframe .expanderSvg {\n",
       "    width: 8px;\n",
       "    height: 8px;\n",
       "    margin-right: 3px;\n",
       "}\n",
       "\n",
       "table.dataframe .expander {\n",
       "    display: flex;\n",
       "    align-items: center;\n",
       "}\n",
       "\n",
       "&sol;* formatting *&sol;\n",
       "\n",
       "table.dataframe .null {\n",
       "    color: var(--text-color-pale);\n",
       "}\n",
       "\n",
       "table.dataframe .structural {\n",
       "    color: var(--text-color-medium);\n",
       "    font-weight: bold;\n",
       "}\n",
       "\n",
       "table.dataframe .dataFrameCaption {\n",
       "    font-weight: bold;\n",
       "}\n",
       "\n",
       "table.dataframe .numbers {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe td:hover .formatted .structural, .null {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe tr:hover .formatted .structural, .null {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "\n",
       ":root {\n",
       "    --scroll-bg: #f5f5f5;\n",
       "    --scroll-fg: #b3b3b3;\n",
       "}\n",
       ":root[theme=&quot;dark&quot;], :root [data-jp-theme-light=&quot;false&quot;]{\n",
       "    --scroll-bg: #3c3c3c;\n",
       "    --scroll-fg: #97e1fb;\n",
       "}\n",
       "body {\n",
       "    scrollbar-color: var(--scroll-fg) var(--scroll-bg);\n",
       "}\n",
       "body::-webkit-scrollbar {\n",
       "    width: 10px; &sol;* Mostly for vertical scrollbars *&sol;\n",
       "    height: 10px; &sol;* Mostly for horizontal scrollbars *&sol;\n",
       "}\n",
       "body::-webkit-scrollbar-thumb {\n",
       "    background-color: var(--scroll-fg);\n",
       "}\n",
       "body::-webkit-scrollbar-track {\n",
       "    background-color: var(--scroll-bg);\n",
       "}\n",
       "            &lt;&sol;style&gt;\n",
       "        &lt;&sol;head&gt;\n",
       "        &lt;body&gt;\n",
       "            &lt;table class=&quot;dataframe&quot; id=&quot;df_536870924&quot;&gt;&lt;&sol;table&gt;\n",
       "\n",
       "&lt;p class=&quot;dataframe_description&quot;&gt;... showing only top 20 of 24 rows&lt;&sol;p&gt;&lt;p class=&quot;dataframe_description&quot;&gt;DataFrame: rowsCount = 24, columnsCount = 3&lt;&sol;p&gt;\n",
       "\n",
       "        &lt;&sol;body&gt;\n",
       "        &lt;script&gt;\n",
       "            (function () {\n",
       "    window.DataFrame = window.DataFrame || new (function () {\n",
       "        this.addTable = function (df) {\n",
       "            let cols = df.cols;\n",
       "            for (let i = 0; i &lt; cols.length; i++) {\n",
       "                for (let c of cols[i].children) {\n",
       "                    cols[c].parent = i;\n",
       "                }\n",
       "            }\n",
       "            df.nrow = 0\n",
       "            for (let i = 0; i &lt; df.cols.length; i++) {\n",
       "                if (df.cols[i].values.length &gt; df.nrow) df.nrow = df.cols[i].values.length\n",
       "            }\n",
       "            if (df.id === df.rootId) {\n",
       "                df.expandedFrames = new Set()\n",
       "                df.childFrames = {}\n",
       "                const table = this.getTableElement(df.id)\n",
       "                table.df = df\n",
       "                for (let i = 0; i &lt; df.cols.length; i++) {\n",
       "                    let col = df.cols[i]\n",
       "                    if (col.parent === undefined &amp;&amp; col.children.length &gt; 0) col.expanded = true\n",
       "                }\n",
       "            } else {\n",
       "                const rootDf = this.getTableData(df.rootId)\n",
       "                rootDf.childFrames[df.id] = df\n",
       "            }\n",
       "        }\n",
       "\n",
       "        this.computeRenderData = function (df) {\n",
       "            let result = []\n",
       "            let pos = 0\n",
       "            for (let col = 0; col &lt; df.cols.length; col++) {\n",
       "                if (df.cols[col].parent === undefined)\n",
       "                    pos += this.computeRenderDataRec(df.cols, col, pos, 0, result, false, false)\n",
       "            }\n",
       "            for (let i = 0; i &lt; result.length; i++) {\n",
       "                let row = result[i]\n",
       "                for (let j = 0; j &lt; row.length; j++) {\n",
       "                    let cell = row[j]\n",
       "                    if (j === 0)\n",
       "                        cell.leftBd = false\n",
       "                    if (j &lt; row.length - 1) {\n",
       "                        let nextData = row[j + 1]\n",
       "                        if (nextData.leftBd) cell.rightBd = true\n",
       "                        else if (cell.rightBd) nextData.leftBd = true\n",
       "                    } else cell.rightBd = false\n",
       "                }\n",
       "            }\n",
       "            return result\n",
       "        }\n",
       "\n",
       "        this.computeRenderDataRec = function (cols, colId, pos, depth, result, leftBorder, rightBorder) {\n",
       "            if (result.length === depth) {\n",
       "                const array = [];\n",
       "                if (pos &gt; 0) {\n",
       "                    let j = 0\n",
       "                    for (let i = 0; j &lt; pos; i++) {\n",
       "                        let c = result[depth - 1][i]\n",
       "                        j += c.span\n",
       "                        let copy = Object.assign({empty: true}, c)\n",
       "                        array.push(copy)\n",
       "                    }\n",
       "                }\n",
       "                result.push(array)\n",
       "            }\n",
       "            const col = cols[colId];\n",
       "            let size = 0;\n",
       "            if (col.expanded) {\n",
       "                let childPos = pos\n",
       "                for (let i = 0; i &lt; col.children.length; i++) {\n",
       "                    let child = col.children[i]\n",
       "                    let childLeft = i === 0 &amp;&amp; (col.children.length &gt; 1 || leftBorder)\n",
       "                    let childRight = i === col.children.length - 1 &amp;&amp; (col.children.length &gt; 1 || rightBorder)\n",
       "                    let childSize = this.computeRenderDataRec(cols, child, childPos, depth + 1, result, childLeft, childRight)\n",
       "                    childPos += childSize\n",
       "                    size += childSize\n",
       "                }\n",
       "            } else {\n",
       "                for (let i = depth + 1; i &lt; result.length; i++)\n",
       "                    result[i].push({id: colId, span: 1, leftBd: leftBorder, rightBd: rightBorder, empty: true})\n",
       "                size = 1\n",
       "            }\n",
       "            let left = leftBorder\n",
       "            let right = rightBorder\n",
       "            if (size &gt; 1) {\n",
       "                left = true\n",
       "                right = true\n",
       "            }\n",
       "            result[depth].push({id: colId, span: size, leftBd: left, rightBd: right})\n",
       "            return size\n",
       "        }\n",
       "\n",
       "        this.getTableElement = function (id) {\n",
       "            return document.getElementById(&quot;df_&quot; + id)\n",
       "        }\n",
       "\n",
       "        this.getTableData = function (id) {\n",
       "            return this.getTableElement(id).df\n",
       "        }\n",
       "\n",
       "        this.createExpander = function (isExpanded) {\n",
       "            const svgNs = &quot;http:&sol;&sol;www.w3.org&sol;2000&sol;svg&quot;\n",
       "            let svg = document.createElementNS(svgNs, &quot;svg&quot;)\n",
       "            svg.classList.add(&quot;expanderSvg&quot;)\n",
       "            let path = document.createElementNS(svgNs, &quot;path&quot;)\n",
       "            if (isExpanded) {\n",
       "                svg.setAttribute(&quot;viewBox&quot;, &quot;0 -2 8 8&quot;)\n",
       "                path.setAttribute(&quot;d&quot;, &quot;M1 0 l-1 1 4 4 4 -4 -1 -1 -3 3Z&quot;)\n",
       "            } else {\n",
       "                svg.setAttribute(&quot;viewBox&quot;, &quot;-2 0 8 8&quot;)\n",
       "                path.setAttribute(&quot;d&quot;, &quot;M1 0 l-1 1 3 3 -3 3 1 1 4 -4Z&quot;)\n",
       "            }\n",
       "            path.setAttribute(&quot;fill&quot;, &quot;currentColor&quot;)\n",
       "            svg.appendChild(path)\n",
       "            return svg\n",
       "        }\n",
       "\n",
       "        this.renderTable = function (id) {\n",
       "\n",
       "            let table = this.getTableElement(id)\n",
       "\n",
       "            if (table === null) return\n",
       "\n",
       "            table.innerHTML = &quot;&quot;\n",
       "\n",
       "            let df = table.df\n",
       "            let rootDf = df.rootId === df.id ? df : this.getTableData(df.rootId)\n",
       "\n",
       "            &sol;&sol; header\n",
       "            let header = document.createElement(&quot;thead&quot;)\n",
       "            table.appendChild(header)\n",
       "\n",
       "            let renderData = this.computeRenderData(df)\n",
       "            for (let j = 0; j &lt; renderData.length; j++) {\n",
       "                let rowData = renderData[j]\n",
       "                let tr = document.createElement(&quot;tr&quot;);\n",
       "                let isLastRow = j === renderData.length - 1\n",
       "                header.appendChild(tr);\n",
       "                for (let i = 0; i &lt; rowData.length; i++) {\n",
       "                    let cell = rowData[i]\n",
       "                    let th = document.createElement(&quot;th&quot;);\n",
       "                    th.setAttribute(&quot;colspan&quot;, cell.span)\n",
       "                    let colId = cell.id\n",
       "                    let col = df.cols[colId];\n",
       "                    if (!cell.empty) {\n",
       "                        if (col.children.length === 0) {\n",
       "                            th.innerHTML = col.name\n",
       "                        } else {\n",
       "                            let link = document.createElement(&quot;a&quot;)\n",
       "                            link.className = &quot;expander&quot;\n",
       "                            let that = this\n",
       "                            link.onclick = function () {\n",
       "                                col.expanded = !col.expanded\n",
       "                                that.renderTable(id)\n",
       "                            }\n",
       "                            link.appendChild(this.createExpander(col.expanded))\n",
       "                            link.innerHTML += col.name\n",
       "                            th.appendChild(link)\n",
       "                        }\n",
       "                    }\n",
       "                    let classes = (cell.leftBd ? &quot; leftBorder&quot; : &quot;&quot;) + (cell.rightBd ? &quot; rightBorder&quot; : &quot;&quot;)\n",
       "                    if (col.rightAlign)\n",
       "                        classes += &quot; rightAlign&quot;\n",
       "                    if (isLastRow)\n",
       "                        classes += &quot; bottomBorder&quot;\n",
       "                    if (classes.length &gt; 0)\n",
       "                        th.setAttribute(&quot;class&quot;, classes)\n",
       "                    tr.appendChild(th)\n",
       "                }\n",
       "            }\n",
       "\n",
       "            &sol;&sol; body\n",
       "            let body = document.createElement(&quot;tbody&quot;)\n",
       "            table.appendChild(body)\n",
       "\n",
       "            let columns = renderData.pop()\n",
       "            for (let row = 0; row &lt; df.nrow; row++) {\n",
       "                let tr = document.createElement(&quot;tr&quot;);\n",
       "                body.appendChild(tr)\n",
       "                for (let i = 0; i &lt; columns.length; i++) {\n",
       "                    let cell = columns[i]\n",
       "                    let td = document.createElement(&quot;td&quot;);\n",
       "                    let colId = cell.id\n",
       "                    let col = df.cols[colId]\n",
       "                    let classes = (cell.leftBd ? &quot; leftBorder&quot; : &quot;&quot;) + (cell.rightBd ? &quot; rightBorder&quot; : &quot;&quot;)\n",
       "                    if (col.rightAlign)\n",
       "                        classes += &quot; rightAlign&quot;\n",
       "                    if (classes.length &gt; 0)\n",
       "                        td.setAttribute(&quot;class&quot;, classes)\n",
       "                    tr.appendChild(td)\n",
       "                    let value = col.values[row]\n",
       "                    if (value.frameId !== undefined) {\n",
       "                        let frameId = value.frameId\n",
       "                        let expanded = rootDf.expandedFrames.has(frameId)\n",
       "                        let link = document.createElement(&quot;a&quot;)\n",
       "                        link.className = &quot;expander&quot;\n",
       "                        let that = this\n",
       "                        link.onclick = function () {\n",
       "                            if (rootDf.expandedFrames.has(frameId))\n",
       "                                rootDf.expandedFrames.delete(frameId)\n",
       "                            else rootDf.expandedFrames.add(frameId)\n",
       "                            that.renderTable(id)\n",
       "                        }\n",
       "                        link.appendChild(this.createExpander(expanded))\n",
       "                        link.innerHTML += value.value\n",
       "                        if (expanded) {\n",
       "                            td.appendChild(link)\n",
       "                            td.appendChild(document.createElement(&quot;p&quot;))\n",
       "                            const childTable = document.createElement(&quot;table&quot;)\n",
       "                            childTable.className = &quot;dataframe&quot;\n",
       "                            childTable.id = &quot;df_&quot; + frameId\n",
       "                            let childDf = rootDf.childFrames[frameId]\n",
       "                            childTable.df = childDf\n",
       "                            td.appendChild(childTable)\n",
       "                            this.renderTable(frameId)\n",
       "                            if (childDf.nrow !== childDf.totalRows) {\n",
       "                                const footer = document.createElement(&quot;p&quot;)\n",
       "                                footer.innerText = `... showing only top ${childDf.nrow} of ${childDf.totalRows} rows`\n",
       "                                td.appendChild(footer)\n",
       "                            }\n",
       "                        } else {\n",
       "                            td.appendChild(link)\n",
       "                        }\n",
       "                    } else if (value.style !== undefined) {\n",
       "                        td.innerHTML = value.value\n",
       "                        td.setAttribute(&quot;style&quot;, value.style)\n",
       "                    } else td.innerHTML = value\n",
       "                    this.nodeScriptReplace(td)\n",
       "                }\n",
       "            }\n",
       "        }\n",
       "\n",
       "        this.nodeScriptReplace = function (node) {\n",
       "            if (this.nodeScriptIs(node) === true) {\n",
       "                node.parentNode.replaceChild(this.nodeScriptClone(node), node);\n",
       "            } else {\n",
       "                let i = -1, children = node.childNodes;\n",
       "                while (++i &lt; children.length) {\n",
       "                    this.nodeScriptReplace(children[i]);\n",
       "                }\n",
       "            }\n",
       "\n",
       "            return node;\n",
       "        }\n",
       "\n",
       "        this.nodeScriptClone = function (node) {\n",
       "            let script = document.createElement(&quot;script&quot;);\n",
       "            script.text = node.innerHTML;\n",
       "\n",
       "            let i = -1, attrs = node.attributes, attr;\n",
       "            while (++i &lt; attrs.length) {\n",
       "                script.setAttribute((attr = attrs[i]).name, attr.value);\n",
       "            }\n",
       "            return script;\n",
       "        }\n",
       "\n",
       "        this.nodeScriptIs = function (node) {\n",
       "            return node.tagName === 'SCRIPT';\n",
       "        }\n",
       "    })()\n",
       "\n",
       "    window.call_DataFrame = function (f) {\n",
       "        return f();\n",
       "    };\n",
       "\n",
       "    let funQueue = window[&quot;kotlinQueues&quot;] &amp;&amp; window[&quot;kotlinQueues&quot;][&quot;DataFrame&quot;];\n",
       "    if (funQueue) {\n",
       "        funQueue.forEach(function (f) {\n",
       "            f();\n",
       "        });\n",
       "        funQueue = [];\n",
       "    }\n",
       "})()\n",
       "\n",
       "&sol;*&lt;!--*&sol;\n",
       "call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: &quot;&lt;span title=&bsol;&quot;full_name: String&bsol;&quot;&gt;full_name&lt;&sol;span&gt;&quot;, children: [], rightAlign: false, values: [&quot;JetBrains&sol;ideavim&quot;,&quot;JetBrains&sol;MPS&quot;,&quot;JetBrains&sol;intellij-community&quot;,&quot;JetBrains&sol;intellij-scala&quot;,&quot;JetBrains&sol;kotlin&quot;,&quot;JetBrains&sol;intellij-plugins&quot;,&quot;JetBrains&sol;Exposed&quot;,&quot;JetBrains&sol;kotlin-web-site&quot;,&quot;JetBrains&sol;idea-gitignore&quot;,&quot;JetBrains&sol;swot&quot;,&quot;JetBrains&sol;phpstorm-stubs&quot;,&quot;JetBrains&sol;gradle-intellij-plugin&quot;,&quot;JetBrains&sol;svg-sprite-loader&quot;,&quot;JetBrains&sol;resharper-unity&quot;,&quot;JetBrains&sol;kotlin-native&quot;,&quot;JetBrains&sol;create-react-kotlin-app&quot;,&quot;JetBrains&sol;ring-ui&quot;,&quot;JetBrains&sol;kotlinconf-app&quot;,&quot;JetBrains&sol;JetBrainsMono&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;JetBrains&sol;intellij-platform-plugin-template&bsol;&quot;&gt;JetBrains&sol;intellij-platform-plugin-te&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;] }, \n",
       "{ name: &quot;&lt;span title=&bsol;&quot;stargazers_count: Int&bsol;&quot;&gt;stargazers_count&lt;&sol;span&gt;&quot;, children: [], rightAlign: true, values: [&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;6120&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;1241&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;12926&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;1066&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;39402&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;1737&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;5688&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;1074&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;1181&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;1072&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;1110&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;1058&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;1815&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;1017&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;7101&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;2424&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;2836&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;2628&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;6059&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;1133&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;] }, \n",
       "{ name: &quot;&lt;span title=&bsol;&quot;topics: String&bsol;&quot;&gt;topics&lt;&sol;span&gt;&quot;, children: [], rightAlign: false, values: [&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;[ideavim, intellij, intellij-platform, jb-official, kotlin, vim, vim-emulator]&bsol;&quot;&gt;[ideavim, intellij, intellij-platform&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;[domain-specific-language, dsl]&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;[code-editor, ide, intellij, intellij-community, intellij-platform]&bsol;&quot;&gt;[code-editor, ide, intellij, intellij&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;[intellij-idea, intellij-plugin, scala]&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;[compiler, gradle-plugin, intellij-plugin, kotlin, kotlin-library, maven-plugin, programming-language]&bsol;&quot;&gt;[compiler, gradle-plugin, intellij-pl&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;[]&quot;,&quot;[dao, kotlin, orm, sql]&quot;,&quot;[kotlin]&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;[gitignore, ignore-files, intellij, intellij-plugin, java]&bsol;&quot;&gt;[gitignore, ignore-files, intellij, i&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;[]&quot;,&quot;[]&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;[gradle, gradle-intellij-plugin, gradle-kotlin-dsl, groovy, intellij, intellij-ides, intellij-platform, intellij-plugin, intellij-sdk, jetbrains-plugin, kotlin, plugin-verifier, publishing-dsl, setup-dsl, teamcity, travis-configuration]&bsol;&quot;&gt;[gradle, gradle-intellij-plugin, grad&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;[sprite, svg, svg-sprite, svg-stack, webpack, webpack-loader, webpack-plugin, webpack2, webpack3]&bsol;&quot;&gt;[sprite, svg, svg-sprite, svg-stack, &lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;[hacktoberfest, jetbrains, plugin, resharper, resharper-plugin, rider, unity, unity-editor]&bsol;&quot;&gt;[hacktoberfest, jetbrains, plugin, re&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;[c, compiler, kotlin, llvm, objective-c]&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;[create-react-app, jetbrains-ui, kotlin, react, webpack]&bsol;&quot;&gt;[create-react-app, jetbrains-ui, kotl&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;[components, jetbrains-ui, react]&quot;,&quot;[]&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;[coding-font, font, ligatures, monospaced-font, programming-font, programming-ligatures]&bsol;&quot;&gt;[coding-font, font, ligatures, monosp&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;[intellij, intellij-idea, intellij-idea-plugin, intellij-platform, intellij-plugin, intellij-plugins, jetbrains-plugin]&bsol;&quot;&gt;[intellij, intellij-idea, intellij-id&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;] }, \n",
       "], id: 536870924, rootId: 536870924, totalRows: 24 } ) });\n",
       "&sol;*--&gt;*&sol;\n",
       "\n",
       "call_DataFrame(function() { DataFrame.renderTable(536870924) });\n",
       "\n",
       "\n",
       "        &lt;&sol;script&gt;\n",
       "        &lt;&sol;html&gt;\"></iframe>\n",
       "            <script>\n",
       "                function o_resize_iframe_out_7() {\n",
       "                    let elem = document.getElementById(\"iframe_out_7\");\n",
       "                    resize_iframe_out_7(elem);\n",
       "                    setInterval(resize_iframe_out_7, 5000, elem);\n",
       "                }\n",
       "                function resize_iframe_out_7(el) {\n",
       "                    let h = el.contentWindow.document.body.scrollHeight;\n",
       "                    el.height = h === 0 ? 0 : h + 41;\n",
       "                }\n",
       "            </script>        <html theme='dark'>\n",
       "        <head>\n",
       "            <style type=\"text/css\">\n",
       "                :root {\n",
       "    --background: #fff;\n",
       "    --background-odd: #f5f5f5;\n",
       "    --background-hover: #d9edfd;\n",
       "    --header-text-color: #474747;\n",
       "    --text-color: #848484;\n",
       "    --text-color-dark: #000;\n",
       "    --text-color-medium: #737373;\n",
       "    --text-color-pale: #b3b3b3;\n",
       "    --inner-border-color: #aaa;\n",
       "    --bold-border-color: #000;\n",
       "    --link-color: #296eaa;\n",
       "    --link-color-pale: #296eaa;\n",
       "    --link-hover: #1a466c;\n",
       "}\n",
       "\n",
       ":root[theme=\"dark\"], :root [data-jp-theme-light=\"false\"], .dataframe_dark{\n",
       "    --background: #303030;\n",
       "    --background-odd: #3c3c3c;\n",
       "    --background-hover: #464646;\n",
       "    --header-text-color: #dddddd;\n",
       "    --text-color: #b3b3b3;\n",
       "    --text-color-dark: #dddddd;\n",
       "    --text-color-medium: #b2b2b2;\n",
       "    --text-color-pale: #737373;\n",
       "    --inner-border-color: #707070;\n",
       "    --bold-border-color: #777777;\n",
       "    --link-color: #008dc0;\n",
       "    --link-color-pale: #97e1fb;\n",
       "    --link-hover: #00688e;\n",
       "}\n",
       "\n",
       "p.dataframe_description {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe {\n",
       "    font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n",
       "    font-size: 12px;\n",
       "    background-color: var(--background);\n",
       "    color: var(--text-color-dark);\n",
       "    border: none;\n",
       "    border-collapse: collapse;\n",
       "}\n",
       "\n",
       "table.dataframe th, td {\n",
       "    padding: 6px;\n",
       "    border: 1px solid transparent;\n",
       "    text-align: left;\n",
       "}\n",
       "\n",
       "table.dataframe th {\n",
       "    background-color: var(--background);\n",
       "    color: var(--header-text-color);\n",
       "}\n",
       "\n",
       "table.dataframe td {\n",
       "    vertical-align: top;\n",
       "    white-space: nowrap;\n",
       "}\n",
       "\n",
       "table.dataframe th.bottomBorder {\n",
       "    border-bottom-color: var(--bold-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe tbody > tr:nth-child(odd) {\n",
       "    background: var(--background-odd);\n",
       "}\n",
       "\n",
       "table.dataframe tbody > tr:nth-child(even) {\n",
       "    background: var(--background);\n",
       "}\n",
       "\n",
       "table.dataframe tbody > tr:hover {\n",
       "    background: var(--background-hover);\n",
       "}\n",
       "\n",
       "table.dataframe a {\n",
       "    cursor: pointer;\n",
       "    color: var(--link-color);\n",
       "    text-decoration: none;\n",
       "}\n",
       "\n",
       "table.dataframe tr:hover > td a {\n",
       "    color: var(--link-color-pale);\n",
       "}\n",
       "\n",
       "table.dataframe a:hover {\n",
       "    color: var(--link-hover);\n",
       "    text-decoration: underline;\n",
       "}\n",
       "\n",
       "table.dataframe img {\n",
       "    max-width: fit-content;\n",
       "}\n",
       "\n",
       "table.dataframe th.complex {\n",
       "    background-color: var(--background);\n",
       "    border: 1px solid var(--background);\n",
       "}\n",
       "\n",
       "table.dataframe .leftBorder {\n",
       "    border-left-color: var(--inner-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe .rightBorder {\n",
       "    border-right-color: var(--inner-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe .rightAlign {\n",
       "    text-align: right;\n",
       "}\n",
       "\n",
       "table.dataframe .expanderSvg {\n",
       "    width: 8px;\n",
       "    height: 8px;\n",
       "    margin-right: 3px;\n",
       "}\n",
       "\n",
       "table.dataframe .expander {\n",
       "    display: flex;\n",
       "    align-items: center;\n",
       "}\n",
       "\n",
       "/* formatting */\n",
       "\n",
       "table.dataframe .null {\n",
       "    color: var(--text-color-pale);\n",
       "}\n",
       "\n",
       "table.dataframe .structural {\n",
       "    color: var(--text-color-medium);\n",
       "    font-weight: bold;\n",
       "}\n",
       "\n",
       "table.dataframe .dataFrameCaption {\n",
       "    font-weight: bold;\n",
       "}\n",
       "\n",
       "table.dataframe .numbers {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe td:hover .formatted .structural, .null {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe tr:hover .formatted .structural, .null {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "\n",
       "            </style>\n",
       "        </head>\n",
       "        <body>\n",
       "            <table class=\"dataframe\" id=\"static_df_536870925\"><thead><tr><th class=\"bottomBorder\" style=\"text-align:left\">full_name</th><th class=\"bottomBorder\" style=\"text-align:left\">stargazers_count</th><th class=\"bottomBorder\" style=\"text-align:left\">topics</th></tr></thead><tbody><tr><td  style=\"vertical-align:top\">JetBrains/ideavim</td><td  style=\"vertical-align:top\">6120</td><td  style=\"vertical-align:top\">[ideavim, intellij, intellij-platform<span class=\"structural\">...</span></td></tr><tr><td  style=\"vertical-align:top\">JetBrains/MPS</td><td  style=\"vertical-align:top\">1241</td><td  style=\"vertical-align:top\">[domain-specific-language, dsl]</td></tr><tr><td  style=\"vertical-align:top\">JetBrains/intellij-community</td><td  style=\"vertical-align:top\">12926</td><td  style=\"vertical-align:top\">[code-editor, ide, intellij, intellij<span class=\"structural\">...</span></td></tr><tr><td  style=\"vertical-align:top\">JetBrains/intellij-scala</td><td  style=\"vertical-align:top\">1066</td><td  style=\"vertical-align:top\">[intellij-idea, intellij-plugin, scala]</td></tr><tr><td  style=\"vertical-align:top\">JetBrains/kotlin</td><td  style=\"vertical-align:top\">39402</td><td  style=\"vertical-align:top\">[compiler, gradle-plugin, intellij-pl<span class=\"structural\">...</span></td></tr><tr><td  style=\"vertical-align:top\">JetBrains/intellij-plugins</td><td  style=\"vertical-align:top\">1737</td><td  style=\"vertical-align:top\">[]</td></tr><tr><td  style=\"vertical-align:top\">JetBrains/Exposed</td><td  style=\"vertical-align:top\">5688</td><td  style=\"vertical-align:top\">[dao, kotlin, orm, sql]</td></tr><tr><td  style=\"vertical-align:top\">JetBrains/kotlin-web-site</td><td  style=\"vertical-align:top\">1074</td><td  style=\"vertical-align:top\">[kotlin]</td></tr><tr><td  style=\"vertical-align:top\">JetBrains/idea-gitignore</td><td  style=\"vertical-align:top\">1181</td><td  style=\"vertical-align:top\">[gitignore, ignore-files, intellij, i<span class=\"structural\">...</span></td></tr><tr><td  style=\"vertical-align:top\">JetBrains/swot</td><td  style=\"vertical-align:top\">1072</td><td  style=\"vertical-align:top\">[]</td></tr><tr><td  style=\"vertical-align:top\">JetBrains/phpstorm-stubs</td><td  style=\"vertical-align:top\">1110</td><td  style=\"vertical-align:top\">[]</td></tr><tr><td  style=\"vertical-align:top\">JetBrains/gradle-intellij-plugin</td><td  style=\"vertical-align:top\">1058</td><td  style=\"vertical-align:top\">[gradle, gradle-intellij-plugin, grad<span class=\"structural\">...</span></td></tr><tr><td  style=\"vertical-align:top\">JetBrains/svg-sprite-loader</td><td  style=\"vertical-align:top\">1815</td><td  style=\"vertical-align:top\">[sprite, svg, svg-sprite, svg-stack, <span class=\"structural\">...</span></td></tr><tr><td  style=\"vertical-align:top\">JetBrains/resharper-unity</td><td  style=\"vertical-align:top\">1017</td><td  style=\"vertical-align:top\">[hacktoberfest, jetbrains, plugin, re<span class=\"structural\">...</span></td></tr><tr><td  style=\"vertical-align:top\">JetBrains/kotlin-native</td><td  style=\"vertical-align:top\">7101</td><td  style=\"vertical-align:top\">[c, compiler, kotlin, llvm, objective-c]</td></tr><tr><td  style=\"vertical-align:top\">JetBrains/create-react-kotlin-app</td><td  style=\"vertical-align:top\">2424</td><td  style=\"vertical-align:top\">[create-react-app, jetbrains-ui, kotl<span class=\"structural\">...</span></td></tr><tr><td  style=\"vertical-align:top\">JetBrains/ring-ui</td><td  style=\"vertical-align:top\">2836</td><td  style=\"vertical-align:top\">[components, jetbrains-ui, react]</td></tr><tr><td  style=\"vertical-align:top\">JetBrains/kotlinconf-app</td><td  style=\"vertical-align:top\">2628</td><td  style=\"vertical-align:top\">[]</td></tr><tr><td  style=\"vertical-align:top\">JetBrains/JetBrainsMono</td><td  style=\"vertical-align:top\">6059</td><td  style=\"vertical-align:top\">[coding-font, font, ligatures, monosp<span class=\"structural\">...</span></td></tr><tr><td  style=\"vertical-align:top\">JetBrains/intellij-platform-plugin-te<span class=\"structural\">...</span></td><td  style=\"vertical-align:top\">1133</td><td  style=\"vertical-align:top\">[intellij, intellij-idea, intellij-id<span class=\"structural\">...</span></td></tr></tbody></table>\n",
       "        </body>\n",
       "        <script>\n",
       "            document.getElementById(\"static_df_536870925\").style.display = \"none\";\n",
       "        </script>\n",
       "        </html>"
      ],
      "application/kotlindataframe+json": "{\"$version\":\"2.1.1\",\"metadata\":{\"columns\":[\"full_name\",\"stargazers_count\",\"topics\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"}],\"nrow\":24,\"ncol\":3},\"kotlin_dataframe\":[{\"full_name\":\"JetBrains/ideavim\",\"stargazers_count\":6120,\"topics\":\"[ideavim, intellij, intellij-platform, jb-official, kotlin, vim, vim-emulator]\"},{\"full_name\":\"JetBrains/MPS\",\"stargazers_count\":1241,\"topics\":\"[domain-specific-language, dsl]\"},{\"full_name\":\"JetBrains/intellij-community\",\"stargazers_count\":12926,\"topics\":\"[code-editor, ide, intellij, intellij-community, intellij-platform]\"},{\"full_name\":\"JetBrains/intellij-scala\",\"stargazers_count\":1066,\"topics\":\"[intellij-idea, intellij-plugin, scala]\"},{\"full_name\":\"JetBrains/kotlin\",\"stargazers_count\":39402,\"topics\":\"[compiler, gradle-plugin, intellij-plugin, kotlin, kotlin-library, maven-plugin, programming-language]\"},{\"full_name\":\"JetBrains/intellij-plugins\",\"stargazers_count\":1737,\"topics\":\"[]\"},{\"full_name\":\"JetBrains/Exposed\",\"stargazers_count\":5688,\"topics\":\"[dao, kotlin, orm, sql]\"},{\"full_name\":\"JetBrains/kotlin-web-site\",\"stargazers_count\":1074,\"topics\":\"[kotlin]\"},{\"full_name\":\"JetBrains/idea-gitignore\",\"stargazers_count\":1181,\"topics\":\"[gitignore, ignore-files, intellij, intellij-plugin, java]\"},{\"full_name\":\"JetBrains/swot\",\"stargazers_count\":1072,\"topics\":\"[]\"},{\"full_name\":\"JetBrains/phpstorm-stubs\",\"stargazers_count\":1110,\"topics\":\"[]\"},{\"full_name\":\"JetBrains/gradle-intellij-plugin\",\"stargazers_count\":1058,\"topics\":\"[gradle, gradle-intellij-plugin, gradle-kotlin-dsl, groovy, intellij, intellij-ides, intellij-platform, intellij-plugin, intellij-sdk, jetbrains-plugin, kotlin, plugin-verifier, publishing-dsl, setup-dsl, teamcity, travis-configuration]\"},{\"full_name\":\"JetBrains/svg-sprite-loader\",\"stargazers_count\":1815,\"topics\":\"[sprite, svg, svg-sprite, svg-stack, webpack, webpack-loader, webpack-plugin, webpack2, webpack3]\"},{\"full_name\":\"JetBrains/resharper-unity\",\"stargazers_count\":1017,\"topics\":\"[hacktoberfest, jetbrains, plugin, resharper, resharper-plugin, rider, unity, unity-editor]\"},{\"full_name\":\"JetBrains/kotlin-native\",\"stargazers_count\":7101,\"topics\":\"[c, compiler, kotlin, llvm, objective-c]\"},{\"full_name\":\"JetBrains/create-react-kotlin-app\",\"stargazers_count\":2424,\"topics\":\"[create-react-app, jetbrains-ui, kotlin, react, webpack]\"},{\"full_name\":\"JetBrains/ring-ui\",\"stargazers_count\":2836,\"topics\":\"[components, jetbrains-ui, react]\"},{\"full_name\":\"JetBrains/kotlinconf-app\",\"stargazers_count\":2628,\"topics\":\"[]\"},{\"full_name\":\"JetBrains/JetBrainsMono\",\"stargazers_count\":6059,\"topics\":\"[coding-font, font, ligatures, monospaced-font, programming-font, programming-ligatures]\"},{\"full_name\":\"JetBrains/intellij-platform-plugin-template\",\"stargazers_count\":1133,\"topics\":\"[intellij, intellij-idea, intellij-idea-plugin, intellij-platform, intellij-plugin, intellij-plugins, jetbrains-plugin]\"}]}"
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 6
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "## Columns Rename"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "Columns can be renamed using the `.rename { }` operation, which also uses the Columns Selection DSL to select a column to rename.\n",
    "The `rename` operation does not perform the renaming immediately; instead, it creates an intermediate object that must be finalized into a new `DataFrame` by calling the `.into()` function with the new column name.\n",
    "\n",
    "Rename \"full_name\" and \"stargazers_count\" columns:"
   ]
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-01T13:42:33.268662Z",
     "start_time": "2025-05-01T13:42:33.136288Z"
    }
   },
   "cell_type": "code",
   "source": [
    "// Rename \"full_name\" column into \"name\"\n",
    "val dfRenamed = dfFiltered\n",
    "    .rename { full_name }.into(\"name\")\n",
    "    // And \"stargazers_count\" into \"starsCount\"\n",
    "    .rename { stargazers_count }.into(\"starsCount\")\n",
    "dfRenamed"
   ],
   "outputs": [
    {
     "data": {
      "text/html": [
       "            <iframe onload=\"o_resize_iframe_out_9()\" style=\"width:100%;\" class=\"result_container\" id=\"iframe_out_9\" frameBorder=\"0\" srcdoc=\"        &lt;html theme='dark'&gt;\n",
       "        &lt;head&gt;\n",
       "            &lt;style type=&quot;text&sol;css&quot;&gt;\n",
       "                :root {\n",
       "    --background: #fff;\n",
       "    --background-odd: #f5f5f5;\n",
       "    --background-hover: #d9edfd;\n",
       "    --header-text-color: #474747;\n",
       "    --text-color: #848484;\n",
       "    --text-color-dark: #000;\n",
       "    --text-color-medium: #737373;\n",
       "    --text-color-pale: #b3b3b3;\n",
       "    --inner-border-color: #aaa;\n",
       "    --bold-border-color: #000;\n",
       "    --link-color: #296eaa;\n",
       "    --link-color-pale: #296eaa;\n",
       "    --link-hover: #1a466c;\n",
       "}\n",
       "\n",
       ":root[theme=&quot;dark&quot;], :root [data-jp-theme-light=&quot;false&quot;], .dataframe_dark{\n",
       "    --background: #303030;\n",
       "    --background-odd: #3c3c3c;\n",
       "    --background-hover: #464646;\n",
       "    --header-text-color: #dddddd;\n",
       "    --text-color: #b3b3b3;\n",
       "    --text-color-dark: #dddddd;\n",
       "    --text-color-medium: #b2b2b2;\n",
       "    --text-color-pale: #737373;\n",
       "    --inner-border-color: #707070;\n",
       "    --bold-border-color: #777777;\n",
       "    --link-color: #008dc0;\n",
       "    --link-color-pale: #97e1fb;\n",
       "    --link-hover: #00688e;\n",
       "}\n",
       "\n",
       "p.dataframe_description {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe {\n",
       "    font-family: &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif;\n",
       "    font-size: 12px;\n",
       "    background-color: var(--background);\n",
       "    color: var(--text-color-dark);\n",
       "    border: none;\n",
       "    border-collapse: collapse;\n",
       "}\n",
       "\n",
       "table.dataframe th, td {\n",
       "    padding: 6px;\n",
       "    border: 1px solid transparent;\n",
       "    text-align: left;\n",
       "}\n",
       "\n",
       "table.dataframe th {\n",
       "    background-color: var(--background);\n",
       "    color: var(--header-text-color);\n",
       "}\n",
       "\n",
       "table.dataframe td {\n",
       "    vertical-align: top;\n",
       "    white-space: nowrap;\n",
       "}\n",
       "\n",
       "table.dataframe th.bottomBorder {\n",
       "    border-bottom-color: var(--bold-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe tbody &gt; tr:nth-child(odd) {\n",
       "    background: var(--background-odd);\n",
       "}\n",
       "\n",
       "table.dataframe tbody &gt; tr:nth-child(even) {\n",
       "    background: var(--background);\n",
       "}\n",
       "\n",
       "table.dataframe tbody &gt; tr:hover {\n",
       "    background: var(--background-hover);\n",
       "}\n",
       "\n",
       "table.dataframe a {\n",
       "    cursor: pointer;\n",
       "    color: var(--link-color);\n",
       "    text-decoration: none;\n",
       "}\n",
       "\n",
       "table.dataframe tr:hover &gt; td a {\n",
       "    color: var(--link-color-pale);\n",
       "}\n",
       "\n",
       "table.dataframe a:hover {\n",
       "    color: var(--link-hover);\n",
       "    text-decoration: underline;\n",
       "}\n",
       "\n",
       "table.dataframe img {\n",
       "    max-width: fit-content;\n",
       "}\n",
       "\n",
       "table.dataframe th.complex {\n",
       "    background-color: var(--background);\n",
       "    border: 1px solid var(--background);\n",
       "}\n",
       "\n",
       "table.dataframe .leftBorder {\n",
       "    border-left-color: var(--inner-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe .rightBorder {\n",
       "    border-right-color: var(--inner-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe .rightAlign {\n",
       "    text-align: right;\n",
       "}\n",
       "\n",
       "table.dataframe .expanderSvg {\n",
       "    width: 8px;\n",
       "    height: 8px;\n",
       "    margin-right: 3px;\n",
       "}\n",
       "\n",
       "table.dataframe .expander {\n",
       "    display: flex;\n",
       "    align-items: center;\n",
       "}\n",
       "\n",
       "&sol;* formatting *&sol;\n",
       "\n",
       "table.dataframe .null {\n",
       "    color: var(--text-color-pale);\n",
       "}\n",
       "\n",
       "table.dataframe .structural {\n",
       "    color: var(--text-color-medium);\n",
       "    font-weight: bold;\n",
       "}\n",
       "\n",
       "table.dataframe .dataFrameCaption {\n",
       "    font-weight: bold;\n",
       "}\n",
       "\n",
       "table.dataframe .numbers {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe td:hover .formatted .structural, .null {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe tr:hover .formatted .structural, .null {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "\n",
       ":root {\n",
       "    --scroll-bg: #f5f5f5;\n",
       "    --scroll-fg: #b3b3b3;\n",
       "}\n",
       ":root[theme=&quot;dark&quot;], :root [data-jp-theme-light=&quot;false&quot;]{\n",
       "    --scroll-bg: #3c3c3c;\n",
       "    --scroll-fg: #97e1fb;\n",
       "}\n",
       "body {\n",
       "    scrollbar-color: var(--scroll-fg) var(--scroll-bg);\n",
       "}\n",
       "body::-webkit-scrollbar {\n",
       "    width: 10px; &sol;* Mostly for vertical scrollbars *&sol;\n",
       "    height: 10px; &sol;* Mostly for horizontal scrollbars *&sol;\n",
       "}\n",
       "body::-webkit-scrollbar-thumb {\n",
       "    background-color: var(--scroll-fg);\n",
       "}\n",
       "body::-webkit-scrollbar-track {\n",
       "    background-color: var(--scroll-bg);\n",
       "}\n",
       "            &lt;&sol;style&gt;\n",
       "        &lt;&sol;head&gt;\n",
       "        &lt;body&gt;\n",
       "            &lt;table class=&quot;dataframe&quot; id=&quot;df_536870928&quot;&gt;&lt;&sol;table&gt;\n",
       "\n",
       "&lt;p class=&quot;dataframe_description&quot;&gt;... showing only top 20 of 24 rows&lt;&sol;p&gt;&lt;p class=&quot;dataframe_description&quot;&gt;DataFrame: rowsCount = 24, columnsCount = 3&lt;&sol;p&gt;\n",
       "\n",
       "        &lt;&sol;body&gt;\n",
       "        &lt;script&gt;\n",
       "            (function () {\n",
       "    window.DataFrame = window.DataFrame || new (function () {\n",
       "        this.addTable = function (df) {\n",
       "            let cols = df.cols;\n",
       "            for (let i = 0; i &lt; cols.length; i++) {\n",
       "                for (let c of cols[i].children) {\n",
       "                    cols[c].parent = i;\n",
       "                }\n",
       "            }\n",
       "            df.nrow = 0\n",
       "            for (let i = 0; i &lt; df.cols.length; i++) {\n",
       "                if (df.cols[i].values.length &gt; df.nrow) df.nrow = df.cols[i].values.length\n",
       "            }\n",
       "            if (df.id === df.rootId) {\n",
       "                df.expandedFrames = new Set()\n",
       "                df.childFrames = {}\n",
       "                const table = this.getTableElement(df.id)\n",
       "                table.df = df\n",
       "                for (let i = 0; i &lt; df.cols.length; i++) {\n",
       "                    let col = df.cols[i]\n",
       "                    if (col.parent === undefined &amp;&amp; col.children.length &gt; 0) col.expanded = true\n",
       "                }\n",
       "            } else {\n",
       "                const rootDf = this.getTableData(df.rootId)\n",
       "                rootDf.childFrames[df.id] = df\n",
       "            }\n",
       "        }\n",
       "\n",
       "        this.computeRenderData = function (df) {\n",
       "            let result = []\n",
       "            let pos = 0\n",
       "            for (let col = 0; col &lt; df.cols.length; col++) {\n",
       "                if (df.cols[col].parent === undefined)\n",
       "                    pos += this.computeRenderDataRec(df.cols, col, pos, 0, result, false, false)\n",
       "            }\n",
       "            for (let i = 0; i &lt; result.length; i++) {\n",
       "                let row = result[i]\n",
       "                for (let j = 0; j &lt; row.length; j++) {\n",
       "                    let cell = row[j]\n",
       "                    if (j === 0)\n",
       "                        cell.leftBd = false\n",
       "                    if (j &lt; row.length - 1) {\n",
       "                        let nextData = row[j + 1]\n",
       "                        if (nextData.leftBd) cell.rightBd = true\n",
       "                        else if (cell.rightBd) nextData.leftBd = true\n",
       "                    } else cell.rightBd = false\n",
       "                }\n",
       "            }\n",
       "            return result\n",
       "        }\n",
       "\n",
       "        this.computeRenderDataRec = function (cols, colId, pos, depth, result, leftBorder, rightBorder) {\n",
       "            if (result.length === depth) {\n",
       "                const array = [];\n",
       "                if (pos &gt; 0) {\n",
       "                    let j = 0\n",
       "                    for (let i = 0; j &lt; pos; i++) {\n",
       "                        let c = result[depth - 1][i]\n",
       "                        j += c.span\n",
       "                        let copy = Object.assign({empty: true}, c)\n",
       "                        array.push(copy)\n",
       "                    }\n",
       "                }\n",
       "                result.push(array)\n",
       "            }\n",
       "            const col = cols[colId];\n",
       "            let size = 0;\n",
       "            if (col.expanded) {\n",
       "                let childPos = pos\n",
       "                for (let i = 0; i &lt; col.children.length; i++) {\n",
       "                    let child = col.children[i]\n",
       "                    let childLeft = i === 0 &amp;&amp; (col.children.length &gt; 1 || leftBorder)\n",
       "                    let childRight = i === col.children.length - 1 &amp;&amp; (col.children.length &gt; 1 || rightBorder)\n",
       "                    let childSize = this.computeRenderDataRec(cols, child, childPos, depth + 1, result, childLeft, childRight)\n",
       "                    childPos += childSize\n",
       "                    size += childSize\n",
       "                }\n",
       "            } else {\n",
       "                for (let i = depth + 1; i &lt; result.length; i++)\n",
       "                    result[i].push({id: colId, span: 1, leftBd: leftBorder, rightBd: rightBorder, empty: true})\n",
       "                size = 1\n",
       "            }\n",
       "            let left = leftBorder\n",
       "            let right = rightBorder\n",
       "            if (size &gt; 1) {\n",
       "                left = true\n",
       "                right = true\n",
       "            }\n",
       "            result[depth].push({id: colId, span: size, leftBd: left, rightBd: right})\n",
       "            return size\n",
       "        }\n",
       "\n",
       "        this.getTableElement = function (id) {\n",
       "            return document.getElementById(&quot;df_&quot; + id)\n",
       "        }\n",
       "\n",
       "        this.getTableData = function (id) {\n",
       "            return this.getTableElement(id).df\n",
       "        }\n",
       "\n",
       "        this.createExpander = function (isExpanded) {\n",
       "            const svgNs = &quot;http:&sol;&sol;www.w3.org&sol;2000&sol;svg&quot;\n",
       "            let svg = document.createElementNS(svgNs, &quot;svg&quot;)\n",
       "            svg.classList.add(&quot;expanderSvg&quot;)\n",
       "            let path = document.createElementNS(svgNs, &quot;path&quot;)\n",
       "            if (isExpanded) {\n",
       "                svg.setAttribute(&quot;viewBox&quot;, &quot;0 -2 8 8&quot;)\n",
       "                path.setAttribute(&quot;d&quot;, &quot;M1 0 l-1 1 4 4 4 -4 -1 -1 -3 3Z&quot;)\n",
       "            } else {\n",
       "                svg.setAttribute(&quot;viewBox&quot;, &quot;-2 0 8 8&quot;)\n",
       "                path.setAttribute(&quot;d&quot;, &quot;M1 0 l-1 1 3 3 -3 3 1 1 4 -4Z&quot;)\n",
       "            }\n",
       "            path.setAttribute(&quot;fill&quot;, &quot;currentColor&quot;)\n",
       "            svg.appendChild(path)\n",
       "            return svg\n",
       "        }\n",
       "\n",
       "        this.renderTable = function (id) {\n",
       "\n",
       "            let table = this.getTableElement(id)\n",
       "\n",
       "            if (table === null) return\n",
       "\n",
       "            table.innerHTML = &quot;&quot;\n",
       "\n",
       "            let df = table.df\n",
       "            let rootDf = df.rootId === df.id ? df : this.getTableData(df.rootId)\n",
       "\n",
       "            &sol;&sol; header\n",
       "            let header = document.createElement(&quot;thead&quot;)\n",
       "            table.appendChild(header)\n",
       "\n",
       "            let renderData = this.computeRenderData(df)\n",
       "            for (let j = 0; j &lt; renderData.length; j++) {\n",
       "                let rowData = renderData[j]\n",
       "                let tr = document.createElement(&quot;tr&quot;);\n",
       "                let isLastRow = j === renderData.length - 1\n",
       "                header.appendChild(tr);\n",
       "                for (let i = 0; i &lt; rowData.length; i++) {\n",
       "                    let cell = rowData[i]\n",
       "                    let th = document.createElement(&quot;th&quot;);\n",
       "                    th.setAttribute(&quot;colspan&quot;, cell.span)\n",
       "                    let colId = cell.id\n",
       "                    let col = df.cols[colId];\n",
       "                    if (!cell.empty) {\n",
       "                        if (col.children.length === 0) {\n",
       "                            th.innerHTML = col.name\n",
       "                        } else {\n",
       "                            let link = document.createElement(&quot;a&quot;)\n",
       "                            link.className = &quot;expander&quot;\n",
       "                            let that = this\n",
       "                            link.onclick = function () {\n",
       "                                col.expanded = !col.expanded\n",
       "                                that.renderTable(id)\n",
       "                            }\n",
       "                            link.appendChild(this.createExpander(col.expanded))\n",
       "                            link.innerHTML += col.name\n",
       "                            th.appendChild(link)\n",
       "                        }\n",
       "                    }\n",
       "                    let classes = (cell.leftBd ? &quot; leftBorder&quot; : &quot;&quot;) + (cell.rightBd ? &quot; rightBorder&quot; : &quot;&quot;)\n",
       "                    if (col.rightAlign)\n",
       "                        classes += &quot; rightAlign&quot;\n",
       "                    if (isLastRow)\n",
       "                        classes += &quot; bottomBorder&quot;\n",
       "                    if (classes.length &gt; 0)\n",
       "                        th.setAttribute(&quot;class&quot;, classes)\n",
       "                    tr.appendChild(th)\n",
       "                }\n",
       "            }\n",
       "\n",
       "            &sol;&sol; body\n",
       "            let body = document.createElement(&quot;tbody&quot;)\n",
       "            table.appendChild(body)\n",
       "\n",
       "            let columns = renderData.pop()\n",
       "            for (let row = 0; row &lt; df.nrow; row++) {\n",
       "                let tr = document.createElement(&quot;tr&quot;);\n",
       "                body.appendChild(tr)\n",
       "                for (let i = 0; i &lt; columns.length; i++) {\n",
       "                    let cell = columns[i]\n",
       "                    let td = document.createElement(&quot;td&quot;);\n",
       "                    let colId = cell.id\n",
       "                    let col = df.cols[colId]\n",
       "                    let classes = (cell.leftBd ? &quot; leftBorder&quot; : &quot;&quot;) + (cell.rightBd ? &quot; rightBorder&quot; : &quot;&quot;)\n",
       "                    if (col.rightAlign)\n",
       "                        classes += &quot; rightAlign&quot;\n",
       "                    if (classes.length &gt; 0)\n",
       "                        td.setAttribute(&quot;class&quot;, classes)\n",
       "                    tr.appendChild(td)\n",
       "                    let value = col.values[row]\n",
       "                    if (value.frameId !== undefined) {\n",
       "                        let frameId = value.frameId\n",
       "                        let expanded = rootDf.expandedFrames.has(frameId)\n",
       "                        let link = document.createElement(&quot;a&quot;)\n",
       "                        link.className = &quot;expander&quot;\n",
       "                        let that = this\n",
       "                        link.onclick = function () {\n",
       "                            if (rootDf.expandedFrames.has(frameId))\n",
       "                                rootDf.expandedFrames.delete(frameId)\n",
       "                            else rootDf.expandedFrames.add(frameId)\n",
       "                            that.renderTable(id)\n",
       "                        }\n",
       "                        link.appendChild(this.createExpander(expanded))\n",
       "                        link.innerHTML += value.value\n",
       "                        if (expanded) {\n",
       "                            td.appendChild(link)\n",
       "                            td.appendChild(document.createElement(&quot;p&quot;))\n",
       "                            const childTable = document.createElement(&quot;table&quot;)\n",
       "                            childTable.className = &quot;dataframe&quot;\n",
       "                            childTable.id = &quot;df_&quot; + frameId\n",
       "                            let childDf = rootDf.childFrames[frameId]\n",
       "                            childTable.df = childDf\n",
       "                            td.appendChild(childTable)\n",
       "                            this.renderTable(frameId)\n",
       "                            if (childDf.nrow !== childDf.totalRows) {\n",
       "                                const footer = document.createElement(&quot;p&quot;)\n",
       "                                footer.innerText = `... showing only top ${childDf.nrow} of ${childDf.totalRows} rows`\n",
       "                                td.appendChild(footer)\n",
       "                            }\n",
       "                        } else {\n",
       "                            td.appendChild(link)\n",
       "                        }\n",
       "                    } else if (value.style !== undefined) {\n",
       "                        td.innerHTML = value.value\n",
       "                        td.setAttribute(&quot;style&quot;, value.style)\n",
       "                    } else td.innerHTML = value\n",
       "                    this.nodeScriptReplace(td)\n",
       "                }\n",
       "            }\n",
       "        }\n",
       "\n",
       "        this.nodeScriptReplace = function (node) {\n",
       "            if (this.nodeScriptIs(node) === true) {\n",
       "                node.parentNode.replaceChild(this.nodeScriptClone(node), node);\n",
       "            } else {\n",
       "                let i = -1, children = node.childNodes;\n",
       "                while (++i &lt; children.length) {\n",
       "                    this.nodeScriptReplace(children[i]);\n",
       "                }\n",
       "            }\n",
       "\n",
       "            return node;\n",
       "        }\n",
       "\n",
       "        this.nodeScriptClone = function (node) {\n",
       "            let script = document.createElement(&quot;script&quot;);\n",
       "            script.text = node.innerHTML;\n",
       "\n",
       "            let i = -1, attrs = node.attributes, attr;\n",
       "            while (++i &lt; attrs.length) {\n",
       "                script.setAttribute((attr = attrs[i]).name, attr.value);\n",
       "            }\n",
       "            return script;\n",
       "        }\n",
       "\n",
       "        this.nodeScriptIs = function (node) {\n",
       "            return node.tagName === 'SCRIPT';\n",
       "        }\n",
       "    })()\n",
       "\n",
       "    window.call_DataFrame = function (f) {\n",
       "        return f();\n",
       "    };\n",
       "\n",
       "    let funQueue = window[&quot;kotlinQueues&quot;] &amp;&amp; window[&quot;kotlinQueues&quot;][&quot;DataFrame&quot;];\n",
       "    if (funQueue) {\n",
       "        funQueue.forEach(function (f) {\n",
       "            f();\n",
       "        });\n",
       "        funQueue = [];\n",
       "    }\n",
       "})()\n",
       "\n",
       "&sol;*&lt;!--*&sol;\n",
       "call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: &quot;&lt;span title=&bsol;&quot;name: String&bsol;&quot;&gt;name&lt;&sol;span&gt;&quot;, children: [], rightAlign: false, values: [&quot;JetBrains&sol;ideavim&quot;,&quot;JetBrains&sol;MPS&quot;,&quot;JetBrains&sol;intellij-community&quot;,&quot;JetBrains&sol;intellij-scala&quot;,&quot;JetBrains&sol;kotlin&quot;,&quot;JetBrains&sol;intellij-plugins&quot;,&quot;JetBrains&sol;Exposed&quot;,&quot;JetBrains&sol;kotlin-web-site&quot;,&quot;JetBrains&sol;idea-gitignore&quot;,&quot;JetBrains&sol;swot&quot;,&quot;JetBrains&sol;phpstorm-stubs&quot;,&quot;JetBrains&sol;gradle-intellij-plugin&quot;,&quot;JetBrains&sol;svg-sprite-loader&quot;,&quot;JetBrains&sol;resharper-unity&quot;,&quot;JetBrains&sol;kotlin-native&quot;,&quot;JetBrains&sol;create-react-kotlin-app&quot;,&quot;JetBrains&sol;ring-ui&quot;,&quot;JetBrains&sol;kotlinconf-app&quot;,&quot;JetBrains&sol;JetBrainsMono&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;JetBrains&sol;intellij-platform-plugin-template&bsol;&quot;&gt;JetBrains&sol;intellij-platform-plugin-te&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;] }, \n",
       "{ name: &quot;&lt;span title=&bsol;&quot;starsCount: Int&bsol;&quot;&gt;starsCount&lt;&sol;span&gt;&quot;, children: [], rightAlign: true, values: [&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;6120&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;1241&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;12926&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;1066&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;39402&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;1737&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;5688&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;1074&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;1181&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;1072&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;1110&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;1058&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;1815&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;1017&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;7101&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;2424&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;2836&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;2628&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;6059&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;1133&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;] }, \n",
       "{ name: &quot;&lt;span title=&bsol;&quot;topics: String&bsol;&quot;&gt;topics&lt;&sol;span&gt;&quot;, children: [], rightAlign: false, values: [&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;[ideavim, intellij, intellij-platform, jb-official, kotlin, vim, vim-emulator]&bsol;&quot;&gt;[ideavim, intellij, intellij-platform&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;[domain-specific-language, dsl]&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;[code-editor, ide, intellij, intellij-community, intellij-platform]&bsol;&quot;&gt;[code-editor, ide, intellij, intellij&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;[intellij-idea, intellij-plugin, scala]&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;[compiler, gradle-plugin, intellij-plugin, kotlin, kotlin-library, maven-plugin, programming-language]&bsol;&quot;&gt;[compiler, gradle-plugin, intellij-pl&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;[]&quot;,&quot;[dao, kotlin, orm, sql]&quot;,&quot;[kotlin]&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;[gitignore, ignore-files, intellij, intellij-plugin, java]&bsol;&quot;&gt;[gitignore, ignore-files, intellij, i&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;[]&quot;,&quot;[]&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;[gradle, gradle-intellij-plugin, gradle-kotlin-dsl, groovy, intellij, intellij-ides, intellij-platform, intellij-plugin, intellij-sdk, jetbrains-plugin, kotlin, plugin-verifier, publishing-dsl, setup-dsl, teamcity, travis-configuration]&bsol;&quot;&gt;[gradle, gradle-intellij-plugin, grad&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;[sprite, svg, svg-sprite, svg-stack, webpack, webpack-loader, webpack-plugin, webpack2, webpack3]&bsol;&quot;&gt;[sprite, svg, svg-sprite, svg-stack, &lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;[hacktoberfest, jetbrains, plugin, resharper, resharper-plugin, rider, unity, unity-editor]&bsol;&quot;&gt;[hacktoberfest, jetbrains, plugin, re&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;[c, compiler, kotlin, llvm, objective-c]&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;[create-react-app, jetbrains-ui, kotlin, react, webpack]&bsol;&quot;&gt;[create-react-app, jetbrains-ui, kotl&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;[components, jetbrains-ui, react]&quot;,&quot;[]&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;[coding-font, font, ligatures, monospaced-font, programming-font, programming-ligatures]&bsol;&quot;&gt;[coding-font, font, ligatures, monosp&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;[intellij, intellij-idea, intellij-idea-plugin, intellij-platform, intellij-plugin, intellij-plugins, jetbrains-plugin]&bsol;&quot;&gt;[intellij, intellij-idea, intellij-id&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;] }, \n",
       "], id: 536870928, rootId: 536870928, totalRows: 24 } ) });\n",
       "&sol;*--&gt;*&sol;\n",
       "\n",
       "call_DataFrame(function() { DataFrame.renderTable(536870928) });\n",
       "\n",
       "\n",
       "        &lt;&sol;script&gt;\n",
       "        &lt;&sol;html&gt;\"></iframe>\n",
       "            <script>\n",
       "                function o_resize_iframe_out_9() {\n",
       "                    let elem = document.getElementById(\"iframe_out_9\");\n",
       "                    resize_iframe_out_9(elem);\n",
       "                    setInterval(resize_iframe_out_9, 5000, elem);\n",
       "                }\n",
       "                function resize_iframe_out_9(el) {\n",
       "                    let h = el.contentWindow.document.body.scrollHeight;\n",
       "                    el.height = h === 0 ? 0 : h + 41;\n",
       "                }\n",
       "            </script>        <html theme='dark'>\n",
       "        <head>\n",
       "            <style type=\"text/css\">\n",
       "                :root {\n",
       "    --background: #fff;\n",
       "    --background-odd: #f5f5f5;\n",
       "    --background-hover: #d9edfd;\n",
       "    --header-text-color: #474747;\n",
       "    --text-color: #848484;\n",
       "    --text-color-dark: #000;\n",
       "    --text-color-medium: #737373;\n",
       "    --text-color-pale: #b3b3b3;\n",
       "    --inner-border-color: #aaa;\n",
       "    --bold-border-color: #000;\n",
       "    --link-color: #296eaa;\n",
       "    --link-color-pale: #296eaa;\n",
       "    --link-hover: #1a466c;\n",
       "}\n",
       "\n",
       ":root[theme=\"dark\"], :root [data-jp-theme-light=\"false\"], .dataframe_dark{\n",
       "    --background: #303030;\n",
       "    --background-odd: #3c3c3c;\n",
       "    --background-hover: #464646;\n",
       "    --header-text-color: #dddddd;\n",
       "    --text-color: #b3b3b3;\n",
       "    --text-color-dark: #dddddd;\n",
       "    --text-color-medium: #b2b2b2;\n",
       "    --text-color-pale: #737373;\n",
       "    --inner-border-color: #707070;\n",
       "    --bold-border-color: #777777;\n",
       "    --link-color: #008dc0;\n",
       "    --link-color-pale: #97e1fb;\n",
       "    --link-hover: #00688e;\n",
       "}\n",
       "\n",
       "p.dataframe_description {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe {\n",
       "    font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n",
       "    font-size: 12px;\n",
       "    background-color: var(--background);\n",
       "    color: var(--text-color-dark);\n",
       "    border: none;\n",
       "    border-collapse: collapse;\n",
       "}\n",
       "\n",
       "table.dataframe th, td {\n",
       "    padding: 6px;\n",
       "    border: 1px solid transparent;\n",
       "    text-align: left;\n",
       "}\n",
       "\n",
       "table.dataframe th {\n",
       "    background-color: var(--background);\n",
       "    color: var(--header-text-color);\n",
       "}\n",
       "\n",
       "table.dataframe td {\n",
       "    vertical-align: top;\n",
       "    white-space: nowrap;\n",
       "}\n",
       "\n",
       "table.dataframe th.bottomBorder {\n",
       "    border-bottom-color: var(--bold-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe tbody > tr:nth-child(odd) {\n",
       "    background: var(--background-odd);\n",
       "}\n",
       "\n",
       "table.dataframe tbody > tr:nth-child(even) {\n",
       "    background: var(--background);\n",
       "}\n",
       "\n",
       "table.dataframe tbody > tr:hover {\n",
       "    background: var(--background-hover);\n",
       "}\n",
       "\n",
       "table.dataframe a {\n",
       "    cursor: pointer;\n",
       "    color: var(--link-color);\n",
       "    text-decoration: none;\n",
       "}\n",
       "\n",
       "table.dataframe tr:hover > td a {\n",
       "    color: var(--link-color-pale);\n",
       "}\n",
       "\n",
       "table.dataframe a:hover {\n",
       "    color: var(--link-hover);\n",
       "    text-decoration: underline;\n",
       "}\n",
       "\n",
       "table.dataframe img {\n",
       "    max-width: fit-content;\n",
       "}\n",
       "\n",
       "table.dataframe th.complex {\n",
       "    background-color: var(--background);\n",
       "    border: 1px solid var(--background);\n",
       "}\n",
       "\n",
       "table.dataframe .leftBorder {\n",
       "    border-left-color: var(--inner-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe .rightBorder {\n",
       "    border-right-color: var(--inner-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe .rightAlign {\n",
       "    text-align: right;\n",
       "}\n",
       "\n",
       "table.dataframe .expanderSvg {\n",
       "    width: 8px;\n",
       "    height: 8px;\n",
       "    margin-right: 3px;\n",
       "}\n",
       "\n",
       "table.dataframe .expander {\n",
       "    display: flex;\n",
       "    align-items: center;\n",
       "}\n",
       "\n",
       "/* formatting */\n",
       "\n",
       "table.dataframe .null {\n",
       "    color: var(--text-color-pale);\n",
       "}\n",
       "\n",
       "table.dataframe .structural {\n",
       "    color: var(--text-color-medium);\n",
       "    font-weight: bold;\n",
       "}\n",
       "\n",
       "table.dataframe .dataFrameCaption {\n",
       "    font-weight: bold;\n",
       "}\n",
       "\n",
       "table.dataframe .numbers {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe td:hover .formatted .structural, .null {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe tr:hover .formatted .structural, .null {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "\n",
       "            </style>\n",
       "        </head>\n",
       "        <body>\n",
       "            <table class=\"dataframe\" id=\"static_df_536870929\"><thead><tr><th class=\"bottomBorder\" style=\"text-align:left\">name</th><th class=\"bottomBorder\" style=\"text-align:left\">starsCount</th><th class=\"bottomBorder\" style=\"text-align:left\">topics</th></tr></thead><tbody><tr><td  style=\"vertical-align:top\">JetBrains/ideavim</td><td  style=\"vertical-align:top\">6120</td><td  style=\"vertical-align:top\">[ideavim, intellij, intellij-platform<span class=\"structural\">...</span></td></tr><tr><td  style=\"vertical-align:top\">JetBrains/MPS</td><td  style=\"vertical-align:top\">1241</td><td  style=\"vertical-align:top\">[domain-specific-language, dsl]</td></tr><tr><td  style=\"vertical-align:top\">JetBrains/intellij-community</td><td  style=\"vertical-align:top\">12926</td><td  style=\"vertical-align:top\">[code-editor, ide, intellij, intellij<span class=\"structural\">...</span></td></tr><tr><td  style=\"vertical-align:top\">JetBrains/intellij-scala</td><td  style=\"vertical-align:top\">1066</td><td  style=\"vertical-align:top\">[intellij-idea, intellij-plugin, scala]</td></tr><tr><td  style=\"vertical-align:top\">JetBrains/kotlin</td><td  style=\"vertical-align:top\">39402</td><td  style=\"vertical-align:top\">[compiler, gradle-plugin, intellij-pl<span class=\"structural\">...</span></td></tr><tr><td  style=\"vertical-align:top\">JetBrains/intellij-plugins</td><td  style=\"vertical-align:top\">1737</td><td  style=\"vertical-align:top\">[]</td></tr><tr><td  style=\"vertical-align:top\">JetBrains/Exposed</td><td  style=\"vertical-align:top\">5688</td><td  style=\"vertical-align:top\">[dao, kotlin, orm, sql]</td></tr><tr><td  style=\"vertical-align:top\">JetBrains/kotlin-web-site</td><td  style=\"vertical-align:top\">1074</td><td  style=\"vertical-align:top\">[kotlin]</td></tr><tr><td  style=\"vertical-align:top\">JetBrains/idea-gitignore</td><td  style=\"vertical-align:top\">1181</td><td  style=\"vertical-align:top\">[gitignore, ignore-files, intellij, i<span class=\"structural\">...</span></td></tr><tr><td  style=\"vertical-align:top\">JetBrains/swot</td><td  style=\"vertical-align:top\">1072</td><td  style=\"vertical-align:top\">[]</td></tr><tr><td  style=\"vertical-align:top\">JetBrains/phpstorm-stubs</td><td  style=\"vertical-align:top\">1110</td><td  style=\"vertical-align:top\">[]</td></tr><tr><td  style=\"vertical-align:top\">JetBrains/gradle-intellij-plugin</td><td  style=\"vertical-align:top\">1058</td><td  style=\"vertical-align:top\">[gradle, gradle-intellij-plugin, grad<span class=\"structural\">...</span></td></tr><tr><td  style=\"vertical-align:top\">JetBrains/svg-sprite-loader</td><td  style=\"vertical-align:top\">1815</td><td  style=\"vertical-align:top\">[sprite, svg, svg-sprite, svg-stack, <span class=\"structural\">...</span></td></tr><tr><td  style=\"vertical-align:top\">JetBrains/resharper-unity</td><td  style=\"vertical-align:top\">1017</td><td  style=\"vertical-align:top\">[hacktoberfest, jetbrains, plugin, re<span class=\"structural\">...</span></td></tr><tr><td  style=\"vertical-align:top\">JetBrains/kotlin-native</td><td  style=\"vertical-align:top\">7101</td><td  style=\"vertical-align:top\">[c, compiler, kotlin, llvm, objective-c]</td></tr><tr><td  style=\"vertical-align:top\">JetBrains/create-react-kotlin-app</td><td  style=\"vertical-align:top\">2424</td><td  style=\"vertical-align:top\">[create-react-app, jetbrains-ui, kotl<span class=\"structural\">...</span></td></tr><tr><td  style=\"vertical-align:top\">JetBrains/ring-ui</td><td  style=\"vertical-align:top\">2836</td><td  style=\"vertical-align:top\">[components, jetbrains-ui, react]</td></tr><tr><td  style=\"vertical-align:top\">JetBrains/kotlinconf-app</td><td  style=\"vertical-align:top\">2628</td><td  style=\"vertical-align:top\">[]</td></tr><tr><td  style=\"vertical-align:top\">JetBrains/JetBrainsMono</td><td  style=\"vertical-align:top\">6059</td><td  style=\"vertical-align:top\">[coding-font, font, ligatures, monosp<span class=\"structural\">...</span></td></tr><tr><td  style=\"vertical-align:top\">JetBrains/intellij-platform-plugin-te<span class=\"structural\">...</span></td><td  style=\"vertical-align:top\">1133</td><td  style=\"vertical-align:top\">[intellij, intellij-idea, intellij-id<span class=\"structural\">...</span></td></tr></tbody></table>\n",
       "        </body>\n",
       "        <script>\n",
       "            document.getElementById(\"static_df_536870929\").style.display = \"none\";\n",
       "        </script>\n",
       "        </html>"
      ],
      "application/kotlindataframe+json": "{\"$version\":\"2.1.1\",\"metadata\":{\"columns\":[\"name\",\"starsCount\",\"topics\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"}],\"nrow\":24,\"ncol\":3},\"kotlin_dataframe\":[{\"name\":\"JetBrains/ideavim\",\"starsCount\":6120,\"topics\":\"[ideavim, intellij, intellij-platform, jb-official, kotlin, vim, vim-emulator]\"},{\"name\":\"JetBrains/MPS\",\"starsCount\":1241,\"topics\":\"[domain-specific-language, dsl]\"},{\"name\":\"JetBrains/intellij-community\",\"starsCount\":12926,\"topics\":\"[code-editor, ide, intellij, intellij-community, intellij-platform]\"},{\"name\":\"JetBrains/intellij-scala\",\"starsCount\":1066,\"topics\":\"[intellij-idea, intellij-plugin, scala]\"},{\"name\":\"JetBrains/kotlin\",\"starsCount\":39402,\"topics\":\"[compiler, gradle-plugin, intellij-plugin, kotlin, kotlin-library, maven-plugin, programming-language]\"},{\"name\":\"JetBrains/intellij-plugins\",\"starsCount\":1737,\"topics\":\"[]\"},{\"name\":\"JetBrains/Exposed\",\"starsCount\":5688,\"topics\":\"[dao, kotlin, orm, sql]\"},{\"name\":\"JetBrains/kotlin-web-site\",\"starsCount\":1074,\"topics\":\"[kotlin]\"},{\"name\":\"JetBrains/idea-gitignore\",\"starsCount\":1181,\"topics\":\"[gitignore, ignore-files, intellij, intellij-plugin, java]\"},{\"name\":\"JetBrains/swot\",\"starsCount\":1072,\"topics\":\"[]\"},{\"name\":\"JetBrains/phpstorm-stubs\",\"starsCount\":1110,\"topics\":\"[]\"},{\"name\":\"JetBrains/gradle-intellij-plugin\",\"starsCount\":1058,\"topics\":\"[gradle, gradle-intellij-plugin, gradle-kotlin-dsl, groovy, intellij, intellij-ides, intellij-platform, intellij-plugin, intellij-sdk, jetbrains-plugin, kotlin, plugin-verifier, publishing-dsl, setup-dsl, teamcity, travis-configuration]\"},{\"name\":\"JetBrains/svg-sprite-loader\",\"starsCount\":1815,\"topics\":\"[sprite, svg, svg-sprite, svg-stack, webpack, webpack-loader, webpack-plugin, webpack2, webpack3]\"},{\"name\":\"JetBrains/resharper-unity\",\"starsCount\":1017,\"topics\":\"[hacktoberfest, jetbrains, plugin, resharper, resharper-plugin, rider, unity, unity-editor]\"},{\"name\":\"JetBrains/kotlin-native\",\"starsCount\":7101,\"topics\":\"[c, compiler, kotlin, llvm, objective-c]\"},{\"name\":\"JetBrains/create-react-kotlin-app\",\"starsCount\":2424,\"topics\":\"[create-react-app, jetbrains-ui, kotlin, react, webpack]\"},{\"name\":\"JetBrains/ring-ui\",\"starsCount\":2836,\"topics\":\"[components, jetbrains-ui, react]\"},{\"name\":\"JetBrains/kotlinconf-app\",\"starsCount\":2628,\"topics\":\"[]\"},{\"name\":\"JetBrains/JetBrainsMono\",\"starsCount\":6059,\"topics\":\"[coding-font, font, ligatures, monospaced-font, programming-font, programming-ligatures]\"},{\"name\":\"JetBrains/intellij-platform-plugin-template\",\"starsCount\":1133,\"topics\":\"[intellij, intellij-idea, intellij-idea-plugin, intellij-platform, intellij-plugin, intellij-plugins, jetbrains-plugin]\"}]}"
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 7
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "## Modify Columns"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "Columns can be modified using the `update { }` and `convert { }` operations.\n",
    "Both operations select columns to modify via the Columns Selection DSL and, similar to `rename`, create an intermediate object that must be finalized to produce a new `DataFrame`.\n",
    "\n",
    "The `update` operation preserves the original column types, while `convert` allows changing the type.\n",
    "In both cases, column names and their positions remain unchanged.\n",
    "\n",
    "Update \"name\" and convert \"topics\":"
   ]
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-01T13:42:33.518212Z",
     "start_time": "2025-05-01T13:42:33.311730Z"
    }
   },
   "cell_type": "code",
   "source": [
    "val dfUpdated = dfRenamed\n",
    "    // Update \"name\" values with only its second part (after '/')\n",
    "    .update { name }.with { it.split(\"/\")[1] }\n",
    "    // Convert \"topics\" `String` values into `List<String>` by splitting:\n",
    "    .convert { topics }.with { it.removePrefix(\"[\").removeSuffix(\"]\").split(\", \") }\n",
    "dfUpdated"
   ],
   "outputs": [
    {
     "data": {
      "text/html": [
       "            <iframe onload=\"o_resize_iframe_out_11()\" style=\"width:100%;\" class=\"result_container\" id=\"iframe_out_11\" frameBorder=\"0\" srcdoc=\"        &lt;html theme='dark'&gt;\n",
       "        &lt;head&gt;\n",
       "            &lt;style type=&quot;text&sol;css&quot;&gt;\n",
       "                :root {\n",
       "    --background: #fff;\n",
       "    --background-odd: #f5f5f5;\n",
       "    --background-hover: #d9edfd;\n",
       "    --header-text-color: #474747;\n",
       "    --text-color: #848484;\n",
       "    --text-color-dark: #000;\n",
       "    --text-color-medium: #737373;\n",
       "    --text-color-pale: #b3b3b3;\n",
       "    --inner-border-color: #aaa;\n",
       "    --bold-border-color: #000;\n",
       "    --link-color: #296eaa;\n",
       "    --link-color-pale: #296eaa;\n",
       "    --link-hover: #1a466c;\n",
       "}\n",
       "\n",
       ":root[theme=&quot;dark&quot;], :root [data-jp-theme-light=&quot;false&quot;], .dataframe_dark{\n",
       "    --background: #303030;\n",
       "    --background-odd: #3c3c3c;\n",
       "    --background-hover: #464646;\n",
       "    --header-text-color: #dddddd;\n",
       "    --text-color: #b3b3b3;\n",
       "    --text-color-dark: #dddddd;\n",
       "    --text-color-medium: #b2b2b2;\n",
       "    --text-color-pale: #737373;\n",
       "    --inner-border-color: #707070;\n",
       "    --bold-border-color: #777777;\n",
       "    --link-color: #008dc0;\n",
       "    --link-color-pale: #97e1fb;\n",
       "    --link-hover: #00688e;\n",
       "}\n",
       "\n",
       "p.dataframe_description {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe {\n",
       "    font-family: &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif;\n",
       "    font-size: 12px;\n",
       "    background-color: var(--background);\n",
       "    color: var(--text-color-dark);\n",
       "    border: none;\n",
       "    border-collapse: collapse;\n",
       "}\n",
       "\n",
       "table.dataframe th, td {\n",
       "    padding: 6px;\n",
       "    border: 1px solid transparent;\n",
       "    text-align: left;\n",
       "}\n",
       "\n",
       "table.dataframe th {\n",
       "    background-color: var(--background);\n",
       "    color: var(--header-text-color);\n",
       "}\n",
       "\n",
       "table.dataframe td {\n",
       "    vertical-align: top;\n",
       "    white-space: nowrap;\n",
       "}\n",
       "\n",
       "table.dataframe th.bottomBorder {\n",
       "    border-bottom-color: var(--bold-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe tbody &gt; tr:nth-child(odd) {\n",
       "    background: var(--background-odd);\n",
       "}\n",
       "\n",
       "table.dataframe tbody &gt; tr:nth-child(even) {\n",
       "    background: var(--background);\n",
       "}\n",
       "\n",
       "table.dataframe tbody &gt; tr:hover {\n",
       "    background: var(--background-hover);\n",
       "}\n",
       "\n",
       "table.dataframe a {\n",
       "    cursor: pointer;\n",
       "    color: var(--link-color);\n",
       "    text-decoration: none;\n",
       "}\n",
       "\n",
       "table.dataframe tr:hover &gt; td a {\n",
       "    color: var(--link-color-pale);\n",
       "}\n",
       "\n",
       "table.dataframe a:hover {\n",
       "    color: var(--link-hover);\n",
       "    text-decoration: underline;\n",
       "}\n",
       "\n",
       "table.dataframe img {\n",
       "    max-width: fit-content;\n",
       "}\n",
       "\n",
       "table.dataframe th.complex {\n",
       "    background-color: var(--background);\n",
       "    border: 1px solid var(--background);\n",
       "}\n",
       "\n",
       "table.dataframe .leftBorder {\n",
       "    border-left-color: var(--inner-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe .rightBorder {\n",
       "    border-right-color: var(--inner-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe .rightAlign {\n",
       "    text-align: right;\n",
       "}\n",
       "\n",
       "table.dataframe .expanderSvg {\n",
       "    width: 8px;\n",
       "    height: 8px;\n",
       "    margin-right: 3px;\n",
       "}\n",
       "\n",
       "table.dataframe .expander {\n",
       "    display: flex;\n",
       "    align-items: center;\n",
       "}\n",
       "\n",
       "&sol;* formatting *&sol;\n",
       "\n",
       "table.dataframe .null {\n",
       "    color: var(--text-color-pale);\n",
       "}\n",
       "\n",
       "table.dataframe .structural {\n",
       "    color: var(--text-color-medium);\n",
       "    font-weight: bold;\n",
       "}\n",
       "\n",
       "table.dataframe .dataFrameCaption {\n",
       "    font-weight: bold;\n",
       "}\n",
       "\n",
       "table.dataframe .numbers {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe td:hover .formatted .structural, .null {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe tr:hover .formatted .structural, .null {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "\n",
       ":root {\n",
       "    --scroll-bg: #f5f5f5;\n",
       "    --scroll-fg: #b3b3b3;\n",
       "}\n",
       ":root[theme=&quot;dark&quot;], :root [data-jp-theme-light=&quot;false&quot;]{\n",
       "    --scroll-bg: #3c3c3c;\n",
       "    --scroll-fg: #97e1fb;\n",
       "}\n",
       "body {\n",
       "    scrollbar-color: var(--scroll-fg) var(--scroll-bg);\n",
       "}\n",
       "body::-webkit-scrollbar {\n",
       "    width: 10px; &sol;* Mostly for vertical scrollbars *&sol;\n",
       "    height: 10px; &sol;* Mostly for horizontal scrollbars *&sol;\n",
       "}\n",
       "body::-webkit-scrollbar-thumb {\n",
       "    background-color: var(--scroll-fg);\n",
       "}\n",
       "body::-webkit-scrollbar-track {\n",
       "    background-color: var(--scroll-bg);\n",
       "}\n",
       "            &lt;&sol;style&gt;\n",
       "        &lt;&sol;head&gt;\n",
       "        &lt;body&gt;\n",
       "            &lt;table class=&quot;dataframe&quot; id=&quot;df_536870932&quot;&gt;&lt;&sol;table&gt;\n",
       "\n",
       "&lt;p class=&quot;dataframe_description&quot;&gt;... showing only top 20 of 24 rows&lt;&sol;p&gt;&lt;p class=&quot;dataframe_description&quot;&gt;DataFrame: rowsCount = 24, columnsCount = 3&lt;&sol;p&gt;\n",
       "\n",
       "        &lt;&sol;body&gt;\n",
       "        &lt;script&gt;\n",
       "            (function () {\n",
       "    window.DataFrame = window.DataFrame || new (function () {\n",
       "        this.addTable = function (df) {\n",
       "            let cols = df.cols;\n",
       "            for (let i = 0; i &lt; cols.length; i++) {\n",
       "                for (let c of cols[i].children) {\n",
       "                    cols[c].parent = i;\n",
       "                }\n",
       "            }\n",
       "            df.nrow = 0\n",
       "            for (let i = 0; i &lt; df.cols.length; i++) {\n",
       "                if (df.cols[i].values.length &gt; df.nrow) df.nrow = df.cols[i].values.length\n",
       "            }\n",
       "            if (df.id === df.rootId) {\n",
       "                df.expandedFrames = new Set()\n",
       "                df.childFrames = {}\n",
       "                const table = this.getTableElement(df.id)\n",
       "                table.df = df\n",
       "                for (let i = 0; i &lt; df.cols.length; i++) {\n",
       "                    let col = df.cols[i]\n",
       "                    if (col.parent === undefined &amp;&amp; col.children.length &gt; 0) col.expanded = true\n",
       "                }\n",
       "            } else {\n",
       "                const rootDf = this.getTableData(df.rootId)\n",
       "                rootDf.childFrames[df.id] = df\n",
       "            }\n",
       "        }\n",
       "\n",
       "        this.computeRenderData = function (df) {\n",
       "            let result = []\n",
       "            let pos = 0\n",
       "            for (let col = 0; col &lt; df.cols.length; col++) {\n",
       "                if (df.cols[col].parent === undefined)\n",
       "                    pos += this.computeRenderDataRec(df.cols, col, pos, 0, result, false, false)\n",
       "            }\n",
       "            for (let i = 0; i &lt; result.length; i++) {\n",
       "                let row = result[i]\n",
       "                for (let j = 0; j &lt; row.length; j++) {\n",
       "                    let cell = row[j]\n",
       "                    if (j === 0)\n",
       "                        cell.leftBd = false\n",
       "                    if (j &lt; row.length - 1) {\n",
       "                        let nextData = row[j + 1]\n",
       "                        if (nextData.leftBd) cell.rightBd = true\n",
       "                        else if (cell.rightBd) nextData.leftBd = true\n",
       "                    } else cell.rightBd = false\n",
       "                }\n",
       "            }\n",
       "            return result\n",
       "        }\n",
       "\n",
       "        this.computeRenderDataRec = function (cols, colId, pos, depth, result, leftBorder, rightBorder) {\n",
       "            if (result.length === depth) {\n",
       "                const array = [];\n",
       "                if (pos &gt; 0) {\n",
       "                    let j = 0\n",
       "                    for (let i = 0; j &lt; pos; i++) {\n",
       "                        let c = result[depth - 1][i]\n",
       "                        j += c.span\n",
       "                        let copy = Object.assign({empty: true}, c)\n",
       "                        array.push(copy)\n",
       "                    }\n",
       "                }\n",
       "                result.push(array)\n",
       "            }\n",
       "            const col = cols[colId];\n",
       "            let size = 0;\n",
       "            if (col.expanded) {\n",
       "                let childPos = pos\n",
       "                for (let i = 0; i &lt; col.children.length; i++) {\n",
       "                    let child = col.children[i]\n",
       "                    let childLeft = i === 0 &amp;&amp; (col.children.length &gt; 1 || leftBorder)\n",
       "                    let childRight = i === col.children.length - 1 &amp;&amp; (col.children.length &gt; 1 || rightBorder)\n",
       "                    let childSize = this.computeRenderDataRec(cols, child, childPos, depth + 1, result, childLeft, childRight)\n",
       "                    childPos += childSize\n",
       "                    size += childSize\n",
       "                }\n",
       "            } else {\n",
       "                for (let i = depth + 1; i &lt; result.length; i++)\n",
       "                    result[i].push({id: colId, span: 1, leftBd: leftBorder, rightBd: rightBorder, empty: true})\n",
       "                size = 1\n",
       "            }\n",
       "            let left = leftBorder\n",
       "            let right = rightBorder\n",
       "            if (size &gt; 1) {\n",
       "                left = true\n",
       "                right = true\n",
       "            }\n",
       "            result[depth].push({id: colId, span: size, leftBd: left, rightBd: right})\n",
       "            return size\n",
       "        }\n",
       "\n",
       "        this.getTableElement = function (id) {\n",
       "            return document.getElementById(&quot;df_&quot; + id)\n",
       "        }\n",
       "\n",
       "        this.getTableData = function (id) {\n",
       "            return this.getTableElement(id).df\n",
       "        }\n",
       "\n",
       "        this.createExpander = function (isExpanded) {\n",
       "            const svgNs = &quot;http:&sol;&sol;www.w3.org&sol;2000&sol;svg&quot;\n",
       "            let svg = document.createElementNS(svgNs, &quot;svg&quot;)\n",
       "            svg.classList.add(&quot;expanderSvg&quot;)\n",
       "            let path = document.createElementNS(svgNs, &quot;path&quot;)\n",
       "            if (isExpanded) {\n",
       "                svg.setAttribute(&quot;viewBox&quot;, &quot;0 -2 8 8&quot;)\n",
       "                path.setAttribute(&quot;d&quot;, &quot;M1 0 l-1 1 4 4 4 -4 -1 -1 -3 3Z&quot;)\n",
       "            } else {\n",
       "                svg.setAttribute(&quot;viewBox&quot;, &quot;-2 0 8 8&quot;)\n",
       "                path.setAttribute(&quot;d&quot;, &quot;M1 0 l-1 1 3 3 -3 3 1 1 4 -4Z&quot;)\n",
       "            }\n",
       "            path.setAttribute(&quot;fill&quot;, &quot;currentColor&quot;)\n",
       "            svg.appendChild(path)\n",
       "            return svg\n",
       "        }\n",
       "\n",
       "        this.renderTable = function (id) {\n",
       "\n",
       "            let table = this.getTableElement(id)\n",
       "\n",
       "            if (table === null) return\n",
       "\n",
       "            table.innerHTML = &quot;&quot;\n",
       "\n",
       "            let df = table.df\n",
       "            let rootDf = df.rootId === df.id ? df : this.getTableData(df.rootId)\n",
       "\n",
       "            &sol;&sol; header\n",
       "            let header = document.createElement(&quot;thead&quot;)\n",
       "            table.appendChild(header)\n",
       "\n",
       "            let renderData = this.computeRenderData(df)\n",
       "            for (let j = 0; j &lt; renderData.length; j++) {\n",
       "                let rowData = renderData[j]\n",
       "                let tr = document.createElement(&quot;tr&quot;);\n",
       "                let isLastRow = j === renderData.length - 1\n",
       "                header.appendChild(tr);\n",
       "                for (let i = 0; i &lt; rowData.length; i++) {\n",
       "                    let cell = rowData[i]\n",
       "                    let th = document.createElement(&quot;th&quot;);\n",
       "                    th.setAttribute(&quot;colspan&quot;, cell.span)\n",
       "                    let colId = cell.id\n",
       "                    let col = df.cols[colId];\n",
       "                    if (!cell.empty) {\n",
       "                        if (col.children.length === 0) {\n",
       "                            th.innerHTML = col.name\n",
       "                        } else {\n",
       "                            let link = document.createElement(&quot;a&quot;)\n",
       "                            link.className = &quot;expander&quot;\n",
       "                            let that = this\n",
       "                            link.onclick = function () {\n",
       "                                col.expanded = !col.expanded\n",
       "                                that.renderTable(id)\n",
       "                            }\n",
       "                            link.appendChild(this.createExpander(col.expanded))\n",
       "                            link.innerHTML += col.name\n",
       "                            th.appendChild(link)\n",
       "                        }\n",
       "                    }\n",
       "                    let classes = (cell.leftBd ? &quot; leftBorder&quot; : &quot;&quot;) + (cell.rightBd ? &quot; rightBorder&quot; : &quot;&quot;)\n",
       "                    if (col.rightAlign)\n",
       "                        classes += &quot; rightAlign&quot;\n",
       "                    if (isLastRow)\n",
       "                        classes += &quot; bottomBorder&quot;\n",
       "                    if (classes.length &gt; 0)\n",
       "                        th.setAttribute(&quot;class&quot;, classes)\n",
       "                    tr.appendChild(th)\n",
       "                }\n",
       "            }\n",
       "\n",
       "            &sol;&sol; body\n",
       "            let body = document.createElement(&quot;tbody&quot;)\n",
       "            table.appendChild(body)\n",
       "\n",
       "            let columns = renderData.pop()\n",
       "            for (let row = 0; row &lt; df.nrow; row++) {\n",
       "                let tr = document.createElement(&quot;tr&quot;);\n",
       "                body.appendChild(tr)\n",
       "                for (let i = 0; i &lt; columns.length; i++) {\n",
       "                    let cell = columns[i]\n",
       "                    let td = document.createElement(&quot;td&quot;);\n",
       "                    let colId = cell.id\n",
       "                    let col = df.cols[colId]\n",
       "                    let classes = (cell.leftBd ? &quot; leftBorder&quot; : &quot;&quot;) + (cell.rightBd ? &quot; rightBorder&quot; : &quot;&quot;)\n",
       "                    if (col.rightAlign)\n",
       "                        classes += &quot; rightAlign&quot;\n",
       "                    if (classes.length &gt; 0)\n",
       "                        td.setAttribute(&quot;class&quot;, classes)\n",
       "                    tr.appendChild(td)\n",
       "                    let value = col.values[row]\n",
       "                    if (value.frameId !== undefined) {\n",
       "                        let frameId = value.frameId\n",
       "                        let expanded = rootDf.expandedFrames.has(frameId)\n",
       "                        let link = document.createElement(&quot;a&quot;)\n",
       "                        link.className = &quot;expander&quot;\n",
       "                        let that = this\n",
       "                        link.onclick = function () {\n",
       "                            if (rootDf.expandedFrames.has(frameId))\n",
       "                                rootDf.expandedFrames.delete(frameId)\n",
       "                            else rootDf.expandedFrames.add(frameId)\n",
       "                            that.renderTable(id)\n",
       "                        }\n",
       "                        link.appendChild(this.createExpander(expanded))\n",
       "                        link.innerHTML += value.value\n",
       "                        if (expanded) {\n",
       "                            td.appendChild(link)\n",
       "                            td.appendChild(document.createElement(&quot;p&quot;))\n",
       "                            const childTable = document.createElement(&quot;table&quot;)\n",
       "                            childTable.className = &quot;dataframe&quot;\n",
       "                            childTable.id = &quot;df_&quot; + frameId\n",
       "                            let childDf = rootDf.childFrames[frameId]\n",
       "                            childTable.df = childDf\n",
       "                            td.appendChild(childTable)\n",
       "                            this.renderTable(frameId)\n",
       "                            if (childDf.nrow !== childDf.totalRows) {\n",
       "                                const footer = document.createElement(&quot;p&quot;)\n",
       "                                footer.innerText = `... showing only top ${childDf.nrow} of ${childDf.totalRows} rows`\n",
       "                                td.appendChild(footer)\n",
       "                            }\n",
       "                        } else {\n",
       "                            td.appendChild(link)\n",
       "                        }\n",
       "                    } else if (value.style !== undefined) {\n",
       "                        td.innerHTML = value.value\n",
       "                        td.setAttribute(&quot;style&quot;, value.style)\n",
       "                    } else td.innerHTML = value\n",
       "                    this.nodeScriptReplace(td)\n",
       "                }\n",
       "            }\n",
       "        }\n",
       "\n",
       "        this.nodeScriptReplace = function (node) {\n",
       "            if (this.nodeScriptIs(node) === true) {\n",
       "                node.parentNode.replaceChild(this.nodeScriptClone(node), node);\n",
       "            } else {\n",
       "                let i = -1, children = node.childNodes;\n",
       "                while (++i &lt; children.length) {\n",
       "                    this.nodeScriptReplace(children[i]);\n",
       "                }\n",
       "            }\n",
       "\n",
       "            return node;\n",
       "        }\n",
       "\n",
       "        this.nodeScriptClone = function (node) {\n",
       "            let script = document.createElement(&quot;script&quot;);\n",
       "            script.text = node.innerHTML;\n",
       "\n",
       "            let i = -1, attrs = node.attributes, attr;\n",
       "            while (++i &lt; attrs.length) {\n",
       "                script.setAttribute((attr = attrs[i]).name, attr.value);\n",
       "            }\n",
       "            return script;\n",
       "        }\n",
       "\n",
       "        this.nodeScriptIs = function (node) {\n",
       "            return node.tagName === 'SCRIPT';\n",
       "        }\n",
       "    })()\n",
       "\n",
       "    window.call_DataFrame = function (f) {\n",
       "        return f();\n",
       "    };\n",
       "\n",
       "    let funQueue = window[&quot;kotlinQueues&quot;] &amp;&amp; window[&quot;kotlinQueues&quot;][&quot;DataFrame&quot;];\n",
       "    if (funQueue) {\n",
       "        funQueue.forEach(function (f) {\n",
       "            f();\n",
       "        });\n",
       "        funQueue = [];\n",
       "    }\n",
       "})()\n",
       "\n",
       "&sol;*&lt;!--*&sol;\n",
       "call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: &quot;&lt;span title=&bsol;&quot;name: String&bsol;&quot;&gt;name&lt;&sol;span&gt;&quot;, children: [], rightAlign: false, values: [&quot;ideavim&quot;,&quot;MPS&quot;,&quot;intellij-community&quot;,&quot;intellij-scala&quot;,&quot;kotlin&quot;,&quot;intellij-plugins&quot;,&quot;Exposed&quot;,&quot;kotlin-web-site&quot;,&quot;idea-gitignore&quot;,&quot;swot&quot;,&quot;phpstorm-stubs&quot;,&quot;gradle-intellij-plugin&quot;,&quot;svg-sprite-loader&quot;,&quot;resharper-unity&quot;,&quot;kotlin-native&quot;,&quot;create-react-kotlin-app&quot;,&quot;ring-ui&quot;,&quot;kotlinconf-app&quot;,&quot;JetBrainsMono&quot;,&quot;intellij-platform-plugin-template&quot;] }, \n",
       "{ name: &quot;&lt;span title=&bsol;&quot;starsCount: Int&bsol;&quot;&gt;starsCount&lt;&sol;span&gt;&quot;, children: [], rightAlign: true, values: [&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;6120&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;1241&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;12926&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;1066&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;39402&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;1737&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;5688&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;1074&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;1181&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;1072&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;1110&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;1058&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;1815&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;1017&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;7101&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;2424&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;2836&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;2628&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;6059&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;1133&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;] }, \n",
       "{ name: &quot;&lt;span title=&bsol;&quot;topics: List&lt;String&gt;&bsol;&quot;&gt;topics&lt;&sol;span&gt;&quot;, children: [], rightAlign: false, values: [&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;ideavim&bsol;nintellij&bsol;nintellij-platform&bsol;njb-official&bsol;nkotlin&bsol;nvim&bsol;nvim-emulator&bsol;&quot;&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;[&lt;&sol;span&gt;ideavim&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;intellij&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;intellij-pl&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;]&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;domain-specific-language&bsol;ndsl&bsol;&quot;&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;[&lt;&sol;span&gt;domain-specific-language&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;dsl&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;]&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;code-editor&bsol;nide&bsol;nintellij&bsol;nintellij-community&bsol;nintellij-platform&bsol;&quot;&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;[&lt;&sol;span&gt;code-editor&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;ide&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;intellij&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;i&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;i&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;]&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;intellij-idea&bsol;nintellij-plugin&bsol;nscala&bsol;&quot;&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;[&lt;&sol;span&gt;intellij-idea&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;intellij-plugin&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;scala&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;]&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;compiler&bsol;ngradle-plugin&bsol;nintellij-plugin&bsol;nkotlin&bsol;nkotlin-library&bsol;nmaven-plugin&bsol;nprogramming-language&bsol;&quot;&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;[&lt;&sol;span&gt;compiler&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;gradle-plugin&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;intel&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;]&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;[&lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;]&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;dao&bsol;nkotlin&bsol;norm&bsol;nsql&bsol;&quot;&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;[&lt;&sol;span&gt;dao&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;kotlin&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;orm&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;sql&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;]&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;kotlin&bsol;&quot;&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;[&lt;&sol;span&gt;kotlin&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;]&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;gitignore&bsol;nignore-files&bsol;nintellij&bsol;nintellij-plugin&bsol;njava&bsol;&quot;&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;[&lt;&sol;span&gt;gitignore&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;ignore-files&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;intellij&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;]&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;[&lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;]&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;[&lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;]&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;gradle&bsol;ngradle-intellij-plugin&bsol;ngradle-kotlin-dsl&bsol;ngroovy&bsol;nintellij&bsol;nintellij-ides&bsol;nintellij-platform&bsol;nintellij-plugin&bsol;nintellij-sdk&bsol;njetbrains-plugin&bsol;nkotlin&bsol;nplugin-verifier&bsol;npublishing-dsl&bsol;nsetup-dsl&bsol;nteamcity&bsol;ntravis-configuration&bsol;&quot;&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;[&lt;&sol;span&gt;gradle&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;gradle-intellij-plugin&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;]&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;sprite&bsol;nsvg&bsol;nsvg-sprite&bsol;nsvg-stack&bsol;nwebpack&bsol;nwebpack-loader&bsol;nwebpack-plugin&bsol;nwebpack2&bsol;nwebpack3&bsol;&quot;&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;[&lt;&sol;span&gt;sprite&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;svg&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;svg-sprite&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;svg-s&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;]&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;hacktoberfest&bsol;njetbrains&bsol;nplugin&bsol;nresharper&bsol;nresharper-plugin&bsol;nrider&bsol;nunity&bsol;nunity-editor&bsol;&quot;&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;[&lt;&sol;span&gt;hacktoberfest&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;jetbrains&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;plugin&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;]&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;c&bsol;ncompiler&bsol;nkotlin&bsol;nllvm&bsol;nobjective-c&bsol;&quot;&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;[&lt;&sol;span&gt;c&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;compiler&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;kotlin&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;llvm&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;objective-c&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;]&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;create-react-app&bsol;njetbrains-ui&bsol;nkotlin&bsol;nreact&bsol;nwebpack&bsol;&quot;&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;[&lt;&sol;span&gt;create-react-app&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;jetbrains-ui&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;]&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;components&bsol;njetbrains-ui&bsol;nreact&bsol;&quot;&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;[&lt;&sol;span&gt;components&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;jetbrains-ui&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;react&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;]&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;[&lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;]&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;coding-font&bsol;nfont&bsol;nligatures&bsol;nmonospaced-font&bsol;nprogramming-font&bsol;nprogramming-ligatures&bsol;&quot;&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;[&lt;&sol;span&gt;coding-font&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;font&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;ligatures&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;]&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;intellij&bsol;nintellij-idea&bsol;nintellij-idea-plugin&bsol;nintellij-platform&bsol;nintellij-plugin&bsol;nintellij-plugins&bsol;njetbrains-plugin&bsol;&quot;&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;[&lt;&sol;span&gt;intellij&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;intellij-idea&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;intel&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;]&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;] }, \n",
       "], id: 536870932, rootId: 536870932, totalRows: 24 } ) });\n",
       "&sol;*--&gt;*&sol;\n",
       "\n",
       "call_DataFrame(function() { DataFrame.renderTable(536870932) });\n",
       "\n",
       "\n",
       "        &lt;&sol;script&gt;\n",
       "        &lt;&sol;html&gt;\"></iframe>\n",
       "            <script>\n",
       "                function o_resize_iframe_out_11() {\n",
       "                    let elem = document.getElementById(\"iframe_out_11\");\n",
       "                    resize_iframe_out_11(elem);\n",
       "                    setInterval(resize_iframe_out_11, 5000, elem);\n",
       "                }\n",
       "                function resize_iframe_out_11(el) {\n",
       "                    let h = el.contentWindow.document.body.scrollHeight;\n",
       "                    el.height = h === 0 ? 0 : h + 41;\n",
       "                }\n",
       "            </script>        <html theme='dark'>\n",
       "        <head>\n",
       "            <style type=\"text/css\">\n",
       "                :root {\n",
       "    --background: #fff;\n",
       "    --background-odd: #f5f5f5;\n",
       "    --background-hover: #d9edfd;\n",
       "    --header-text-color: #474747;\n",
       "    --text-color: #848484;\n",
       "    --text-color-dark: #000;\n",
       "    --text-color-medium: #737373;\n",
       "    --text-color-pale: #b3b3b3;\n",
       "    --inner-border-color: #aaa;\n",
       "    --bold-border-color: #000;\n",
       "    --link-color: #296eaa;\n",
       "    --link-color-pale: #296eaa;\n",
       "    --link-hover: #1a466c;\n",
       "}\n",
       "\n",
       ":root[theme=\"dark\"], :root [data-jp-theme-light=\"false\"], .dataframe_dark{\n",
       "    --background: #303030;\n",
       "    --background-odd: #3c3c3c;\n",
       "    --background-hover: #464646;\n",
       "    --header-text-color: #dddddd;\n",
       "    --text-color: #b3b3b3;\n",
       "    --text-color-dark: #dddddd;\n",
       "    --text-color-medium: #b2b2b2;\n",
       "    --text-color-pale: #737373;\n",
       "    --inner-border-color: #707070;\n",
       "    --bold-border-color: #777777;\n",
       "    --link-color: #008dc0;\n",
       "    --link-color-pale: #97e1fb;\n",
       "    --link-hover: #00688e;\n",
       "}\n",
       "\n",
       "p.dataframe_description {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe {\n",
       "    font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n",
       "    font-size: 12px;\n",
       "    background-color: var(--background);\n",
       "    color: var(--text-color-dark);\n",
       "    border: none;\n",
       "    border-collapse: collapse;\n",
       "}\n",
       "\n",
       "table.dataframe th, td {\n",
       "    padding: 6px;\n",
       "    border: 1px solid transparent;\n",
       "    text-align: left;\n",
       "}\n",
       "\n",
       "table.dataframe th {\n",
       "    background-color: var(--background);\n",
       "    color: var(--header-text-color);\n",
       "}\n",
       "\n",
       "table.dataframe td {\n",
       "    vertical-align: top;\n",
       "    white-space: nowrap;\n",
       "}\n",
       "\n",
       "table.dataframe th.bottomBorder {\n",
       "    border-bottom-color: var(--bold-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe tbody > tr:nth-child(odd) {\n",
       "    background: var(--background-odd);\n",
       "}\n",
       "\n",
       "table.dataframe tbody > tr:nth-child(even) {\n",
       "    background: var(--background);\n",
       "}\n",
       "\n",
       "table.dataframe tbody > tr:hover {\n",
       "    background: var(--background-hover);\n",
       "}\n",
       "\n",
       "table.dataframe a {\n",
       "    cursor: pointer;\n",
       "    color: var(--link-color);\n",
       "    text-decoration: none;\n",
       "}\n",
       "\n",
       "table.dataframe tr:hover > td a {\n",
       "    color: var(--link-color-pale);\n",
       "}\n",
       "\n",
       "table.dataframe a:hover {\n",
       "    color: var(--link-hover);\n",
       "    text-decoration: underline;\n",
       "}\n",
       "\n",
       "table.dataframe img {\n",
       "    max-width: fit-content;\n",
       "}\n",
       "\n",
       "table.dataframe th.complex {\n",
       "    background-color: var(--background);\n",
       "    border: 1px solid var(--background);\n",
       "}\n",
       "\n",
       "table.dataframe .leftBorder {\n",
       "    border-left-color: var(--inner-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe .rightBorder {\n",
       "    border-right-color: var(--inner-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe .rightAlign {\n",
       "    text-align: right;\n",
       "}\n",
       "\n",
       "table.dataframe .expanderSvg {\n",
       "    width: 8px;\n",
       "    height: 8px;\n",
       "    margin-right: 3px;\n",
       "}\n",
       "\n",
       "table.dataframe .expander {\n",
       "    display: flex;\n",
       "    align-items: center;\n",
       "}\n",
       "\n",
       "/* formatting */\n",
       "\n",
       "table.dataframe .null {\n",
       "    color: var(--text-color-pale);\n",
       "}\n",
       "\n",
       "table.dataframe .structural {\n",
       "    color: var(--text-color-medium);\n",
       "    font-weight: bold;\n",
       "}\n",
       "\n",
       "table.dataframe .dataFrameCaption {\n",
       "    font-weight: bold;\n",
       "}\n",
       "\n",
       "table.dataframe .numbers {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe td:hover .formatted .structural, .null {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe tr:hover .formatted .structural, .null {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "\n",
       "            </style>\n",
       "        </head>\n",
       "        <body>\n",
       "            <table class=\"dataframe\" id=\"static_df_536870933\"><thead><tr><th class=\"bottomBorder\" style=\"text-align:left\">name</th><th class=\"bottomBorder\" style=\"text-align:left\">starsCount</th><th class=\"bottomBorder\" style=\"text-align:left\">topics</th></tr></thead><tbody><tr><td  style=\"vertical-align:top\">ideavim</td><td  style=\"vertical-align:top\">6120</td><td  style=\"vertical-align:top\">[ideavim, intellij, intellij-platform<span class=\"structural\">...</span></td></tr><tr><td  style=\"vertical-align:top\">MPS</td><td  style=\"vertical-align:top\">1241</td><td  style=\"vertical-align:top\">[domain-specific-language, dsl]</td></tr><tr><td  style=\"vertical-align:top\">intellij-community</td><td  style=\"vertical-align:top\">12926</td><td  style=\"vertical-align:top\">[code-editor, ide, intellij, intellij<span class=\"structural\">...</span></td></tr><tr><td  style=\"vertical-align:top\">intellij-scala</td><td  style=\"vertical-align:top\">1066</td><td  style=\"vertical-align:top\">[intellij-idea, intellij-plugin, scala]</td></tr><tr><td  style=\"vertical-align:top\">kotlin</td><td  style=\"vertical-align:top\">39402</td><td  style=\"vertical-align:top\">[compiler, gradle-plugin, intellij-pl<span class=\"structural\">...</span></td></tr><tr><td  style=\"vertical-align:top\">intellij-plugins</td><td  style=\"vertical-align:top\">1737</td><td  style=\"vertical-align:top\">[]</td></tr><tr><td  style=\"vertical-align:top\">Exposed</td><td  style=\"vertical-align:top\">5688</td><td  style=\"vertical-align:top\">[dao, kotlin, orm, sql]</td></tr><tr><td  style=\"vertical-align:top\">kotlin-web-site</td><td  style=\"vertical-align:top\">1074</td><td  style=\"vertical-align:top\">[kotlin]</td></tr><tr><td  style=\"vertical-align:top\">idea-gitignore</td><td  style=\"vertical-align:top\">1181</td><td  style=\"vertical-align:top\">[gitignore, ignore-files, intellij, i<span class=\"structural\">...</span></td></tr><tr><td  style=\"vertical-align:top\">swot</td><td  style=\"vertical-align:top\">1072</td><td  style=\"vertical-align:top\">[]</td></tr><tr><td  style=\"vertical-align:top\">phpstorm-stubs</td><td  style=\"vertical-align:top\">1110</td><td  style=\"vertical-align:top\">[]</td></tr><tr><td  style=\"vertical-align:top\">gradle-intellij-plugin</td><td  style=\"vertical-align:top\">1058</td><td  style=\"vertical-align:top\">[gradle, gradle-intellij-plugin, grad<span class=\"structural\">...</span></td></tr><tr><td  style=\"vertical-align:top\">svg-sprite-loader</td><td  style=\"vertical-align:top\">1815</td><td  style=\"vertical-align:top\">[sprite, svg, svg-sprite, svg-stack, <span class=\"structural\">...</span></td></tr><tr><td  style=\"vertical-align:top\">resharper-unity</td><td  style=\"vertical-align:top\">1017</td><td  style=\"vertical-align:top\">[hacktoberfest, jetbrains, plugin, re<span class=\"structural\">...</span></td></tr><tr><td  style=\"vertical-align:top\">kotlin-native</td><td  style=\"vertical-align:top\">7101</td><td  style=\"vertical-align:top\">[c, compiler, kotlin, llvm, objective-c]</td></tr><tr><td  style=\"vertical-align:top\">create-react-kotlin-app</td><td  style=\"vertical-align:top\">2424</td><td  style=\"vertical-align:top\">[create-react-app, jetbrains-ui, kotl<span class=\"structural\">...</span></td></tr><tr><td  style=\"vertical-align:top\">ring-ui</td><td  style=\"vertical-align:top\">2836</td><td  style=\"vertical-align:top\">[components, jetbrains-ui, react]</td></tr><tr><td  style=\"vertical-align:top\">kotlinconf-app</td><td  style=\"vertical-align:top\">2628</td><td  style=\"vertical-align:top\">[]</td></tr><tr><td  style=\"vertical-align:top\">JetBrainsMono</td><td  style=\"vertical-align:top\">6059</td><td  style=\"vertical-align:top\">[coding-font, font, ligatures, monosp<span class=\"structural\">...</span></td></tr><tr><td  style=\"vertical-align:top\">intellij-platform-plugin-template</td><td  style=\"vertical-align:top\">1133</td><td  style=\"vertical-align:top\">[intellij, intellij-idea, intellij-id<span class=\"structural\">...</span></td></tr></tbody></table>\n",
       "        </body>\n",
       "        <script>\n",
       "            document.getElementById(\"static_df_536870933\").style.display = \"none\";\n",
       "        </script>\n",
       "        </html>"
      ],
      "application/kotlindataframe+json": "{\"$version\":\"2.1.1\",\"metadata\":{\"columns\":[\"name\",\"starsCount\",\"topics\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.collections.List<kotlin.String>\"}],\"nrow\":24,\"ncol\":3},\"kotlin_dataframe\":[{\"name\":\"ideavim\",\"starsCount\":6120,\"topics\":[\"ideavim\",\"intellij\",\"intellij-platform\",\"jb-official\",\"kotlin\",\"vim\",\"vim-emulator\"]},{\"name\":\"MPS\",\"starsCount\":1241,\"topics\":[\"domain-specific-language\",\"dsl\"]},{\"name\":\"intellij-community\",\"starsCount\":12926,\"topics\":[\"code-editor\",\"ide\",\"intellij\",\"intellij-community\",\"intellij-platform\"]},{\"name\":\"intellij-scala\",\"starsCount\":1066,\"topics\":[\"intellij-idea\",\"intellij-plugin\",\"scala\"]},{\"name\":\"kotlin\",\"starsCount\":39402,\"topics\":[\"compiler\",\"gradle-plugin\",\"intellij-plugin\",\"kotlin\",\"kotlin-library\",\"maven-plugin\",\"programming-language\"]},{\"name\":\"intellij-plugins\",\"starsCount\":1737,\"topics\":[\"\"]},{\"name\":\"Exposed\",\"starsCount\":5688,\"topics\":[\"dao\",\"kotlin\",\"orm\",\"sql\"]},{\"name\":\"kotlin-web-site\",\"starsCount\":1074,\"topics\":[\"kotlin\"]},{\"name\":\"idea-gitignore\",\"starsCount\":1181,\"topics\":[\"gitignore\",\"ignore-files\",\"intellij\",\"intellij-plugin\",\"java\"]},{\"name\":\"swot\",\"starsCount\":1072,\"topics\":[\"\"]},{\"name\":\"phpstorm-stubs\",\"starsCount\":1110,\"topics\":[\"\"]},{\"name\":\"gradle-intellij-plugin\",\"starsCount\":1058,\"topics\":[\"gradle\",\"gradle-intellij-plugin\",\"gradle-kotlin-dsl\",\"groovy\",\"intellij\",\"intellij-ides\",\"intellij-platform\",\"intellij-plugin\",\"intellij-sdk\",\"jetbrains-plugin\",\"kotlin\",\"plugin-verifier\",\"publishing-dsl\",\"setup-dsl\",\"teamcity\",\"travis-configuration\"]},{\"name\":\"svg-sprite-loader\",\"starsCount\":1815,\"topics\":[\"sprite\",\"svg\",\"svg-sprite\",\"svg-stack\",\"webpack\",\"webpack-loader\",\"webpack-plugin\",\"webpack2\",\"webpack3\"]},{\"name\":\"resharper-unity\",\"starsCount\":1017,\"topics\":[\"hacktoberfest\",\"jetbrains\",\"plugin\",\"resharper\",\"resharper-plugin\",\"rider\",\"unity\",\"unity-editor\"]},{\"name\":\"kotlin-native\",\"starsCount\":7101,\"topics\":[\"c\",\"compiler\",\"kotlin\",\"llvm\",\"objective-c\"]},{\"name\":\"create-react-kotlin-app\",\"starsCount\":2424,\"topics\":[\"create-react-app\",\"jetbrains-ui\",\"kotlin\",\"react\",\"webpack\"]},{\"name\":\"ring-ui\",\"starsCount\":2836,\"topics\":[\"components\",\"jetbrains-ui\",\"react\"]},{\"name\":\"kotlinconf-app\",\"starsCount\":2628,\"topics\":[\"\"]},{\"name\":\"JetBrainsMono\",\"starsCount\":6059,\"topics\":[\"coding-font\",\"font\",\"ligatures\",\"monospaced-font\",\"programming-font\",\"programming-ligatures\"]},{\"name\":\"intellij-platform-plugin-template\",\"starsCount\":1133,\"topics\":[\"intellij\",\"intellij-idea\",\"intellij-idea-plugin\",\"intellij-platform\",\"intellij-plugin\",\"intellij-plugins\",\"jetbrains-plugin\"]}]}"
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 8
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "Check the new \"topics\" type out:"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-01T13:42:33.579845Z",
     "start_time": "2025-05-01T13:42:33.559883Z"
    }
   },
   "cell_type": "code",
   "source": "dfUpdated.topics.type()",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "kotlin.collections.List<kotlin.String>"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 9
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "## Adding New Columns"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "The `.add { }` function allows creating a `DataFrame` with a new column, where the value for each row is computed based on the existing values in that row. These values can be accessed within the row expressions.\n",
    "\n",
    "Add a new `Boolean` column \"isIntellij\":"
   ]
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-01T13:42:33.704101Z",
     "start_time": "2025-05-01T13:42:33.591205Z"
    }
   },
   "cell_type": "code",
   "source": [
    "// Add a `Boolean` column indicating whether the `name` contains the \"intellij\" substring\n",
    "// or the topics include \"intellij\".\n",
    "val dfWithIsIntellij = dfUpdated.add(\"isIntellij\") {\n",
    "    name.contains(\"intellij\") || \"intellij\" in topics\n",
    "}\n",
    "dfWithIsIntellij"
   ],
   "outputs": [
    {
     "data": {
      "text/html": [
       "            <iframe onload=\"o_resize_iframe_out_13()\" style=\"width:100%;\" class=\"result_container\" id=\"iframe_out_13\" frameBorder=\"0\" srcdoc=\"        &lt;html theme='dark'&gt;\n",
       "        &lt;head&gt;\n",
       "            &lt;style type=&quot;text&sol;css&quot;&gt;\n",
       "                :root {\n",
       "    --background: #fff;\n",
       "    --background-odd: #f5f5f5;\n",
       "    --background-hover: #d9edfd;\n",
       "    --header-text-color: #474747;\n",
       "    --text-color: #848484;\n",
       "    --text-color-dark: #000;\n",
       "    --text-color-medium: #737373;\n",
       "    --text-color-pale: #b3b3b3;\n",
       "    --inner-border-color: #aaa;\n",
       "    --bold-border-color: #000;\n",
       "    --link-color: #296eaa;\n",
       "    --link-color-pale: #296eaa;\n",
       "    --link-hover: #1a466c;\n",
       "}\n",
       "\n",
       ":root[theme=&quot;dark&quot;], :root [data-jp-theme-light=&quot;false&quot;], .dataframe_dark{\n",
       "    --background: #303030;\n",
       "    --background-odd: #3c3c3c;\n",
       "    --background-hover: #464646;\n",
       "    --header-text-color: #dddddd;\n",
       "    --text-color: #b3b3b3;\n",
       "    --text-color-dark: #dddddd;\n",
       "    --text-color-medium: #b2b2b2;\n",
       "    --text-color-pale: #737373;\n",
       "    --inner-border-color: #707070;\n",
       "    --bold-border-color: #777777;\n",
       "    --link-color: #008dc0;\n",
       "    --link-color-pale: #97e1fb;\n",
       "    --link-hover: #00688e;\n",
       "}\n",
       "\n",
       "p.dataframe_description {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe {\n",
       "    font-family: &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif;\n",
       "    font-size: 12px;\n",
       "    background-color: var(--background);\n",
       "    color: var(--text-color-dark);\n",
       "    border: none;\n",
       "    border-collapse: collapse;\n",
       "}\n",
       "\n",
       "table.dataframe th, td {\n",
       "    padding: 6px;\n",
       "    border: 1px solid transparent;\n",
       "    text-align: left;\n",
       "}\n",
       "\n",
       "table.dataframe th {\n",
       "    background-color: var(--background);\n",
       "    color: var(--header-text-color);\n",
       "}\n",
       "\n",
       "table.dataframe td {\n",
       "    vertical-align: top;\n",
       "    white-space: nowrap;\n",
       "}\n",
       "\n",
       "table.dataframe th.bottomBorder {\n",
       "    border-bottom-color: var(--bold-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe tbody &gt; tr:nth-child(odd) {\n",
       "    background: var(--background-odd);\n",
       "}\n",
       "\n",
       "table.dataframe tbody &gt; tr:nth-child(even) {\n",
       "    background: var(--background);\n",
       "}\n",
       "\n",
       "table.dataframe tbody &gt; tr:hover {\n",
       "    background: var(--background-hover);\n",
       "}\n",
       "\n",
       "table.dataframe a {\n",
       "    cursor: pointer;\n",
       "    color: var(--link-color);\n",
       "    text-decoration: none;\n",
       "}\n",
       "\n",
       "table.dataframe tr:hover &gt; td a {\n",
       "    color: var(--link-color-pale);\n",
       "}\n",
       "\n",
       "table.dataframe a:hover {\n",
       "    color: var(--link-hover);\n",
       "    text-decoration: underline;\n",
       "}\n",
       "\n",
       "table.dataframe img {\n",
       "    max-width: fit-content;\n",
       "}\n",
       "\n",
       "table.dataframe th.complex {\n",
       "    background-color: var(--background);\n",
       "    border: 1px solid var(--background);\n",
       "}\n",
       "\n",
       "table.dataframe .leftBorder {\n",
       "    border-left-color: var(--inner-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe .rightBorder {\n",
       "    border-right-color: var(--inner-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe .rightAlign {\n",
       "    text-align: right;\n",
       "}\n",
       "\n",
       "table.dataframe .expanderSvg {\n",
       "    width: 8px;\n",
       "    height: 8px;\n",
       "    margin-right: 3px;\n",
       "}\n",
       "\n",
       "table.dataframe .expander {\n",
       "    display: flex;\n",
       "    align-items: center;\n",
       "}\n",
       "\n",
       "&sol;* formatting *&sol;\n",
       "\n",
       "table.dataframe .null {\n",
       "    color: var(--text-color-pale);\n",
       "}\n",
       "\n",
       "table.dataframe .structural {\n",
       "    color: var(--text-color-medium);\n",
       "    font-weight: bold;\n",
       "}\n",
       "\n",
       "table.dataframe .dataFrameCaption {\n",
       "    font-weight: bold;\n",
       "}\n",
       "\n",
       "table.dataframe .numbers {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe td:hover .formatted .structural, .null {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe tr:hover .formatted .structural, .null {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "\n",
       ":root {\n",
       "    --scroll-bg: #f5f5f5;\n",
       "    --scroll-fg: #b3b3b3;\n",
       "}\n",
       ":root[theme=&quot;dark&quot;], :root [data-jp-theme-light=&quot;false&quot;]{\n",
       "    --scroll-bg: #3c3c3c;\n",
       "    --scroll-fg: #97e1fb;\n",
       "}\n",
       "body {\n",
       "    scrollbar-color: var(--scroll-fg) var(--scroll-bg);\n",
       "}\n",
       "body::-webkit-scrollbar {\n",
       "    width: 10px; &sol;* Mostly for vertical scrollbars *&sol;\n",
       "    height: 10px; &sol;* Mostly for horizontal scrollbars *&sol;\n",
       "}\n",
       "body::-webkit-scrollbar-thumb {\n",
       "    background-color: var(--scroll-fg);\n",
       "}\n",
       "body::-webkit-scrollbar-track {\n",
       "    background-color: var(--scroll-bg);\n",
       "}\n",
       "            &lt;&sol;style&gt;\n",
       "        &lt;&sol;head&gt;\n",
       "        &lt;body&gt;\n",
       "            &lt;table class=&quot;dataframe&quot; id=&quot;df_536870936&quot;&gt;&lt;&sol;table&gt;\n",
       "\n",
       "&lt;p class=&quot;dataframe_description&quot;&gt;... showing only top 20 of 24 rows&lt;&sol;p&gt;&lt;p class=&quot;dataframe_description&quot;&gt;DataFrame: rowsCount = 24, columnsCount = 4&lt;&sol;p&gt;\n",
       "\n",
       "        &lt;&sol;body&gt;\n",
       "        &lt;script&gt;\n",
       "            (function () {\n",
       "    window.DataFrame = window.DataFrame || new (function () {\n",
       "        this.addTable = function (df) {\n",
       "            let cols = df.cols;\n",
       "            for (let i = 0; i &lt; cols.length; i++) {\n",
       "                for (let c of cols[i].children) {\n",
       "                    cols[c].parent = i;\n",
       "                }\n",
       "            }\n",
       "            df.nrow = 0\n",
       "            for (let i = 0; i &lt; df.cols.length; i++) {\n",
       "                if (df.cols[i].values.length &gt; df.nrow) df.nrow = df.cols[i].values.length\n",
       "            }\n",
       "            if (df.id === df.rootId) {\n",
       "                df.expandedFrames = new Set()\n",
       "                df.childFrames = {}\n",
       "                const table = this.getTableElement(df.id)\n",
       "                table.df = df\n",
       "                for (let i = 0; i &lt; df.cols.length; i++) {\n",
       "                    let col = df.cols[i]\n",
       "                    if (col.parent === undefined &amp;&amp; col.children.length &gt; 0) col.expanded = true\n",
       "                }\n",
       "            } else {\n",
       "                const rootDf = this.getTableData(df.rootId)\n",
       "                rootDf.childFrames[df.id] = df\n",
       "            }\n",
       "        }\n",
       "\n",
       "        this.computeRenderData = function (df) {\n",
       "            let result = []\n",
       "            let pos = 0\n",
       "            for (let col = 0; col &lt; df.cols.length; col++) {\n",
       "                if (df.cols[col].parent === undefined)\n",
       "                    pos += this.computeRenderDataRec(df.cols, col, pos, 0, result, false, false)\n",
       "            }\n",
       "            for (let i = 0; i &lt; result.length; i++) {\n",
       "                let row = result[i]\n",
       "                for (let j = 0; j &lt; row.length; j++) {\n",
       "                    let cell = row[j]\n",
       "                    if (j === 0)\n",
       "                        cell.leftBd = false\n",
       "                    if (j &lt; row.length - 1) {\n",
       "                        let nextData = row[j + 1]\n",
       "                        if (nextData.leftBd) cell.rightBd = true\n",
       "                        else if (cell.rightBd) nextData.leftBd = true\n",
       "                    } else cell.rightBd = false\n",
       "                }\n",
       "            }\n",
       "            return result\n",
       "        }\n",
       "\n",
       "        this.computeRenderDataRec = function (cols, colId, pos, depth, result, leftBorder, rightBorder) {\n",
       "            if (result.length === depth) {\n",
       "                const array = [];\n",
       "                if (pos &gt; 0) {\n",
       "                    let j = 0\n",
       "                    for (let i = 0; j &lt; pos; i++) {\n",
       "                        let c = result[depth - 1][i]\n",
       "                        j += c.span\n",
       "                        let copy = Object.assign({empty: true}, c)\n",
       "                        array.push(copy)\n",
       "                    }\n",
       "                }\n",
       "                result.push(array)\n",
       "            }\n",
       "            const col = cols[colId];\n",
       "            let size = 0;\n",
       "            if (col.expanded) {\n",
       "                let childPos = pos\n",
       "                for (let i = 0; i &lt; col.children.length; i++) {\n",
       "                    let child = col.children[i]\n",
       "                    let childLeft = i === 0 &amp;&amp; (col.children.length &gt; 1 || leftBorder)\n",
       "                    let childRight = i === col.children.length - 1 &amp;&amp; (col.children.length &gt; 1 || rightBorder)\n",
       "                    let childSize = this.computeRenderDataRec(cols, child, childPos, depth + 1, result, childLeft, childRight)\n",
       "                    childPos += childSize\n",
       "                    size += childSize\n",
       "                }\n",
       "            } else {\n",
       "                for (let i = depth + 1; i &lt; result.length; i++)\n",
       "                    result[i].push({id: colId, span: 1, leftBd: leftBorder, rightBd: rightBorder, empty: true})\n",
       "                size = 1\n",
       "            }\n",
       "            let left = leftBorder\n",
       "            let right = rightBorder\n",
       "            if (size &gt; 1) {\n",
       "                left = true\n",
       "                right = true\n",
       "            }\n",
       "            result[depth].push({id: colId, span: size, leftBd: left, rightBd: right})\n",
       "            return size\n",
       "        }\n",
       "\n",
       "        this.getTableElement = function (id) {\n",
       "            return document.getElementById(&quot;df_&quot; + id)\n",
       "        }\n",
       "\n",
       "        this.getTableData = function (id) {\n",
       "            return this.getTableElement(id).df\n",
       "        }\n",
       "\n",
       "        this.createExpander = function (isExpanded) {\n",
       "            const svgNs = &quot;http:&sol;&sol;www.w3.org&sol;2000&sol;svg&quot;\n",
       "            let svg = document.createElementNS(svgNs, &quot;svg&quot;)\n",
       "            svg.classList.add(&quot;expanderSvg&quot;)\n",
       "            let path = document.createElementNS(svgNs, &quot;path&quot;)\n",
       "            if (isExpanded) {\n",
       "                svg.setAttribute(&quot;viewBox&quot;, &quot;0 -2 8 8&quot;)\n",
       "                path.setAttribute(&quot;d&quot;, &quot;M1 0 l-1 1 4 4 4 -4 -1 -1 -3 3Z&quot;)\n",
       "            } else {\n",
       "                svg.setAttribute(&quot;viewBox&quot;, &quot;-2 0 8 8&quot;)\n",
       "                path.setAttribute(&quot;d&quot;, &quot;M1 0 l-1 1 3 3 -3 3 1 1 4 -4Z&quot;)\n",
       "            }\n",
       "            path.setAttribute(&quot;fill&quot;, &quot;currentColor&quot;)\n",
       "            svg.appendChild(path)\n",
       "            return svg\n",
       "        }\n",
       "\n",
       "        this.renderTable = function (id) {\n",
       "\n",
       "            let table = this.getTableElement(id)\n",
       "\n",
       "            if (table === null) return\n",
       "\n",
       "            table.innerHTML = &quot;&quot;\n",
       "\n",
       "            let df = table.df\n",
       "            let rootDf = df.rootId === df.id ? df : this.getTableData(df.rootId)\n",
       "\n",
       "            &sol;&sol; header\n",
       "            let header = document.createElement(&quot;thead&quot;)\n",
       "            table.appendChild(header)\n",
       "\n",
       "            let renderData = this.computeRenderData(df)\n",
       "            for (let j = 0; j &lt; renderData.length; j++) {\n",
       "                let rowData = renderData[j]\n",
       "                let tr = document.createElement(&quot;tr&quot;);\n",
       "                let isLastRow = j === renderData.length - 1\n",
       "                header.appendChild(tr);\n",
       "                for (let i = 0; i &lt; rowData.length; i++) {\n",
       "                    let cell = rowData[i]\n",
       "                    let th = document.createElement(&quot;th&quot;);\n",
       "                    th.setAttribute(&quot;colspan&quot;, cell.span)\n",
       "                    let colId = cell.id\n",
       "                    let col = df.cols[colId];\n",
       "                    if (!cell.empty) {\n",
       "                        if (col.children.length === 0) {\n",
       "                            th.innerHTML = col.name\n",
       "                        } else {\n",
       "                            let link = document.createElement(&quot;a&quot;)\n",
       "                            link.className = &quot;expander&quot;\n",
       "                            let that = this\n",
       "                            link.onclick = function () {\n",
       "                                col.expanded = !col.expanded\n",
       "                                that.renderTable(id)\n",
       "                            }\n",
       "                            link.appendChild(this.createExpander(col.expanded))\n",
       "                            link.innerHTML += col.name\n",
       "                            th.appendChild(link)\n",
       "                        }\n",
       "                    }\n",
       "                    let classes = (cell.leftBd ? &quot; leftBorder&quot; : &quot;&quot;) + (cell.rightBd ? &quot; rightBorder&quot; : &quot;&quot;)\n",
       "                    if (col.rightAlign)\n",
       "                        classes += &quot; rightAlign&quot;\n",
       "                    if (isLastRow)\n",
       "                        classes += &quot; bottomBorder&quot;\n",
       "                    if (classes.length &gt; 0)\n",
       "                        th.setAttribute(&quot;class&quot;, classes)\n",
       "                    tr.appendChild(th)\n",
       "                }\n",
       "            }\n",
       "\n",
       "            &sol;&sol; body\n",
       "            let body = document.createElement(&quot;tbody&quot;)\n",
       "            table.appendChild(body)\n",
       "\n",
       "            let columns = renderData.pop()\n",
       "            for (let row = 0; row &lt; df.nrow; row++) {\n",
       "                let tr = document.createElement(&quot;tr&quot;);\n",
       "                body.appendChild(tr)\n",
       "                for (let i = 0; i &lt; columns.length; i++) {\n",
       "                    let cell = columns[i]\n",
       "                    let td = document.createElement(&quot;td&quot;);\n",
       "                    let colId = cell.id\n",
       "                    let col = df.cols[colId]\n",
       "                    let classes = (cell.leftBd ? &quot; leftBorder&quot; : &quot;&quot;) + (cell.rightBd ? &quot; rightBorder&quot; : &quot;&quot;)\n",
       "                    if (col.rightAlign)\n",
       "                        classes += &quot; rightAlign&quot;\n",
       "                    if (classes.length &gt; 0)\n",
       "                        td.setAttribute(&quot;class&quot;, classes)\n",
       "                    tr.appendChild(td)\n",
       "                    let value = col.values[row]\n",
       "                    if (value.frameId !== undefined) {\n",
       "                        let frameId = value.frameId\n",
       "                        let expanded = rootDf.expandedFrames.has(frameId)\n",
       "                        let link = document.createElement(&quot;a&quot;)\n",
       "                        link.className = &quot;expander&quot;\n",
       "                        let that = this\n",
       "                        link.onclick = function () {\n",
       "                            if (rootDf.expandedFrames.has(frameId))\n",
       "                                rootDf.expandedFrames.delete(frameId)\n",
       "                            else rootDf.expandedFrames.add(frameId)\n",
       "                            that.renderTable(id)\n",
       "                        }\n",
       "                        link.appendChild(this.createExpander(expanded))\n",
       "                        link.innerHTML += value.value\n",
       "                        if (expanded) {\n",
       "                            td.appendChild(link)\n",
       "                            td.appendChild(document.createElement(&quot;p&quot;))\n",
       "                            const childTable = document.createElement(&quot;table&quot;)\n",
       "                            childTable.className = &quot;dataframe&quot;\n",
       "                            childTable.id = &quot;df_&quot; + frameId\n",
       "                            let childDf = rootDf.childFrames[frameId]\n",
       "                            childTable.df = childDf\n",
       "                            td.appendChild(childTable)\n",
       "                            this.renderTable(frameId)\n",
       "                            if (childDf.nrow !== childDf.totalRows) {\n",
       "                                const footer = document.createElement(&quot;p&quot;)\n",
       "                                footer.innerText = `... showing only top ${childDf.nrow} of ${childDf.totalRows} rows`\n",
       "                                td.appendChild(footer)\n",
       "                            }\n",
       "                        } else {\n",
       "                            td.appendChild(link)\n",
       "                        }\n",
       "                    } else if (value.style !== undefined) {\n",
       "                        td.innerHTML = value.value\n",
       "                        td.setAttribute(&quot;style&quot;, value.style)\n",
       "                    } else td.innerHTML = value\n",
       "                    this.nodeScriptReplace(td)\n",
       "                }\n",
       "            }\n",
       "        }\n",
       "\n",
       "        this.nodeScriptReplace = function (node) {\n",
       "            if (this.nodeScriptIs(node) === true) {\n",
       "                node.parentNode.replaceChild(this.nodeScriptClone(node), node);\n",
       "            } else {\n",
       "                let i = -1, children = node.childNodes;\n",
       "                while (++i &lt; children.length) {\n",
       "                    this.nodeScriptReplace(children[i]);\n",
       "                }\n",
       "            }\n",
       "\n",
       "            return node;\n",
       "        }\n",
       "\n",
       "        this.nodeScriptClone = function (node) {\n",
       "            let script = document.createElement(&quot;script&quot;);\n",
       "            script.text = node.innerHTML;\n",
       "\n",
       "            let i = -1, attrs = node.attributes, attr;\n",
       "            while (++i &lt; attrs.length) {\n",
       "                script.setAttribute((attr = attrs[i]).name, attr.value);\n",
       "            }\n",
       "            return script;\n",
       "        }\n",
       "\n",
       "        this.nodeScriptIs = function (node) {\n",
       "            return node.tagName === 'SCRIPT';\n",
       "        }\n",
       "    })()\n",
       "\n",
       "    window.call_DataFrame = function (f) {\n",
       "        return f();\n",
       "    };\n",
       "\n",
       "    let funQueue = window[&quot;kotlinQueues&quot;] &amp;&amp; window[&quot;kotlinQueues&quot;][&quot;DataFrame&quot;];\n",
       "    if (funQueue) {\n",
       "        funQueue.forEach(function (f) {\n",
       "            f();\n",
       "        });\n",
       "        funQueue = [];\n",
       "    }\n",
       "})()\n",
       "\n",
       "&sol;*&lt;!--*&sol;\n",
       "call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: &quot;&lt;span title=&bsol;&quot;name: String&bsol;&quot;&gt;name&lt;&sol;span&gt;&quot;, children: [], rightAlign: false, values: [&quot;ideavim&quot;,&quot;MPS&quot;,&quot;intellij-community&quot;,&quot;intellij-scala&quot;,&quot;kotlin&quot;,&quot;intellij-plugins&quot;,&quot;Exposed&quot;,&quot;kotlin-web-site&quot;,&quot;idea-gitignore&quot;,&quot;swot&quot;,&quot;phpstorm-stubs&quot;,&quot;gradle-intellij-plugin&quot;,&quot;svg-sprite-loader&quot;,&quot;resharper-unity&quot;,&quot;kotlin-native&quot;,&quot;create-react-kotlin-app&quot;,&quot;ring-ui&quot;,&quot;kotlinconf-app&quot;,&quot;JetBrainsMono&quot;,&quot;intellij-platform-plugin-template&quot;] }, \n",
       "{ name: &quot;&lt;span title=&bsol;&quot;starsCount: Int&bsol;&quot;&gt;starsCount&lt;&sol;span&gt;&quot;, children: [], rightAlign: true, values: [&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;6120&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;1241&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;12926&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;1066&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;39402&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;1737&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;5688&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;1074&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;1181&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;1072&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;1110&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;1058&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;1815&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;1017&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;7101&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;2424&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;2836&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;2628&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;6059&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;1133&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;] }, \n",
       "{ name: &quot;&lt;span title=&bsol;&quot;topics: List&lt;String&gt;&bsol;&quot;&gt;topics&lt;&sol;span&gt;&quot;, children: [], rightAlign: false, values: [&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;ideavim&bsol;nintellij&bsol;nintellij-platform&bsol;njb-official&bsol;nkotlin&bsol;nvim&bsol;nvim-emulator&bsol;&quot;&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;[&lt;&sol;span&gt;ideavim&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;intellij&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;intellij-pl&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;]&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;domain-specific-language&bsol;ndsl&bsol;&quot;&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;[&lt;&sol;span&gt;domain-specific-language&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;dsl&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;]&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;code-editor&bsol;nide&bsol;nintellij&bsol;nintellij-community&bsol;nintellij-platform&bsol;&quot;&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;[&lt;&sol;span&gt;code-editor&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;ide&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;intellij&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;i&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;i&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;]&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;intellij-idea&bsol;nintellij-plugin&bsol;nscala&bsol;&quot;&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;[&lt;&sol;span&gt;intellij-idea&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;intellij-plugin&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;scala&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;]&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;compiler&bsol;ngradle-plugin&bsol;nintellij-plugin&bsol;nkotlin&bsol;nkotlin-library&bsol;nmaven-plugin&bsol;nprogramming-language&bsol;&quot;&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;[&lt;&sol;span&gt;compiler&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;gradle-plugin&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;intel&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;]&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;[&lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;]&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;dao&bsol;nkotlin&bsol;norm&bsol;nsql&bsol;&quot;&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;[&lt;&sol;span&gt;dao&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;kotlin&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;orm&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;sql&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;]&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;kotlin&bsol;&quot;&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;[&lt;&sol;span&gt;kotlin&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;]&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;gitignore&bsol;nignore-files&bsol;nintellij&bsol;nintellij-plugin&bsol;njava&bsol;&quot;&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;[&lt;&sol;span&gt;gitignore&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;ignore-files&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;intellij&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;]&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;[&lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;]&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;[&lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;]&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;gradle&bsol;ngradle-intellij-plugin&bsol;ngradle-kotlin-dsl&bsol;ngroovy&bsol;nintellij&bsol;nintellij-ides&bsol;nintellij-platform&bsol;nintellij-plugin&bsol;nintellij-sdk&bsol;njetbrains-plugin&bsol;nkotlin&bsol;nplugin-verifier&bsol;npublishing-dsl&bsol;nsetup-dsl&bsol;nteamcity&bsol;ntravis-configuration&bsol;&quot;&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;[&lt;&sol;span&gt;gradle&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;gradle-intellij-plugin&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;]&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;sprite&bsol;nsvg&bsol;nsvg-sprite&bsol;nsvg-stack&bsol;nwebpack&bsol;nwebpack-loader&bsol;nwebpack-plugin&bsol;nwebpack2&bsol;nwebpack3&bsol;&quot;&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;[&lt;&sol;span&gt;sprite&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;svg&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;svg-sprite&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;svg-s&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;]&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;hacktoberfest&bsol;njetbrains&bsol;nplugin&bsol;nresharper&bsol;nresharper-plugin&bsol;nrider&bsol;nunity&bsol;nunity-editor&bsol;&quot;&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;[&lt;&sol;span&gt;hacktoberfest&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;jetbrains&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;plugin&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;]&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;c&bsol;ncompiler&bsol;nkotlin&bsol;nllvm&bsol;nobjective-c&bsol;&quot;&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;[&lt;&sol;span&gt;c&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;compiler&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;kotlin&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;llvm&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;objective-c&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;]&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;create-react-app&bsol;njetbrains-ui&bsol;nkotlin&bsol;nreact&bsol;nwebpack&bsol;&quot;&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;[&lt;&sol;span&gt;create-react-app&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;jetbrains-ui&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;]&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;components&bsol;njetbrains-ui&bsol;nreact&bsol;&quot;&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;[&lt;&sol;span&gt;components&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;jetbrains-ui&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;react&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;]&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;[&lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;]&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;coding-font&bsol;nfont&bsol;nligatures&bsol;nmonospaced-font&bsol;nprogramming-font&bsol;nprogramming-ligatures&bsol;&quot;&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;[&lt;&sol;span&gt;coding-font&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;font&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;ligatures&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;]&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;intellij&bsol;nintellij-idea&bsol;nintellij-idea-plugin&bsol;nintellij-platform&bsol;nintellij-plugin&bsol;nintellij-plugins&bsol;njetbrains-plugin&bsol;&quot;&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;[&lt;&sol;span&gt;intellij&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;intellij-idea&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;intel&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;]&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;] }, \n",
       "{ name: &quot;&lt;span title=&bsol;&quot;isIntellij: Boolean&bsol;&quot;&gt;isIntellij&lt;&sol;span&gt;&quot;, children: [], rightAlign: false, values: [&quot;true&quot;,&quot;false&quot;,&quot;true&quot;,&quot;true&quot;,&quot;false&quot;,&quot;true&quot;,&quot;false&quot;,&quot;false&quot;,&quot;true&quot;,&quot;false&quot;,&quot;false&quot;,&quot;true&quot;,&quot;false&quot;,&quot;false&quot;,&quot;false&quot;,&quot;false&quot;,&quot;false&quot;,&quot;false&quot;,&quot;false&quot;,&quot;true&quot;] }, \n",
       "], id: 536870936, rootId: 536870936, totalRows: 24 } ) });\n",
       "&sol;*--&gt;*&sol;\n",
       "\n",
       "call_DataFrame(function() { DataFrame.renderTable(536870936) });\n",
       "\n",
       "\n",
       "        &lt;&sol;script&gt;\n",
       "        &lt;&sol;html&gt;\"></iframe>\n",
       "            <script>\n",
       "                function o_resize_iframe_out_13() {\n",
       "                    let elem = document.getElementById(\"iframe_out_13\");\n",
       "                    resize_iframe_out_13(elem);\n",
       "                    setInterval(resize_iframe_out_13, 5000, elem);\n",
       "                }\n",
       "                function resize_iframe_out_13(el) {\n",
       "                    let h = el.contentWindow.document.body.scrollHeight;\n",
       "                    el.height = h === 0 ? 0 : h + 41;\n",
       "                }\n",
       "            </script>        <html theme='dark'>\n",
       "        <head>\n",
       "            <style type=\"text/css\">\n",
       "                :root {\n",
       "    --background: #fff;\n",
       "    --background-odd: #f5f5f5;\n",
       "    --background-hover: #d9edfd;\n",
       "    --header-text-color: #474747;\n",
       "    --text-color: #848484;\n",
       "    --text-color-dark: #000;\n",
       "    --text-color-medium: #737373;\n",
       "    --text-color-pale: #b3b3b3;\n",
       "    --inner-border-color: #aaa;\n",
       "    --bold-border-color: #000;\n",
       "    --link-color: #296eaa;\n",
       "    --link-color-pale: #296eaa;\n",
       "    --link-hover: #1a466c;\n",
       "}\n",
       "\n",
       ":root[theme=\"dark\"], :root [data-jp-theme-light=\"false\"], .dataframe_dark{\n",
       "    --background: #303030;\n",
       "    --background-odd: #3c3c3c;\n",
       "    --background-hover: #464646;\n",
       "    --header-text-color: #dddddd;\n",
       "    --text-color: #b3b3b3;\n",
       "    --text-color-dark: #dddddd;\n",
       "    --text-color-medium: #b2b2b2;\n",
       "    --text-color-pale: #737373;\n",
       "    --inner-border-color: #707070;\n",
       "    --bold-border-color: #777777;\n",
       "    --link-color: #008dc0;\n",
       "    --link-color-pale: #97e1fb;\n",
       "    --link-hover: #00688e;\n",
       "}\n",
       "\n",
       "p.dataframe_description {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe {\n",
       "    font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n",
       "    font-size: 12px;\n",
       "    background-color: var(--background);\n",
       "    color: var(--text-color-dark);\n",
       "    border: none;\n",
       "    border-collapse: collapse;\n",
       "}\n",
       "\n",
       "table.dataframe th, td {\n",
       "    padding: 6px;\n",
       "    border: 1px solid transparent;\n",
       "    text-align: left;\n",
       "}\n",
       "\n",
       "table.dataframe th {\n",
       "    background-color: var(--background);\n",
       "    color: var(--header-text-color);\n",
       "}\n",
       "\n",
       "table.dataframe td {\n",
       "    vertical-align: top;\n",
       "    white-space: nowrap;\n",
       "}\n",
       "\n",
       "table.dataframe th.bottomBorder {\n",
       "    border-bottom-color: var(--bold-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe tbody > tr:nth-child(odd) {\n",
       "    background: var(--background-odd);\n",
       "}\n",
       "\n",
       "table.dataframe tbody > tr:nth-child(even) {\n",
       "    background: var(--background);\n",
       "}\n",
       "\n",
       "table.dataframe tbody > tr:hover {\n",
       "    background: var(--background-hover);\n",
       "}\n",
       "\n",
       "table.dataframe a {\n",
       "    cursor: pointer;\n",
       "    color: var(--link-color);\n",
       "    text-decoration: none;\n",
       "}\n",
       "\n",
       "table.dataframe tr:hover > td a {\n",
       "    color: var(--link-color-pale);\n",
       "}\n",
       "\n",
       "table.dataframe a:hover {\n",
       "    color: var(--link-hover);\n",
       "    text-decoration: underline;\n",
       "}\n",
       "\n",
       "table.dataframe img {\n",
       "    max-width: fit-content;\n",
       "}\n",
       "\n",
       "table.dataframe th.complex {\n",
       "    background-color: var(--background);\n",
       "    border: 1px solid var(--background);\n",
       "}\n",
       "\n",
       "table.dataframe .leftBorder {\n",
       "    border-left-color: var(--inner-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe .rightBorder {\n",
       "    border-right-color: var(--inner-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe .rightAlign {\n",
       "    text-align: right;\n",
       "}\n",
       "\n",
       "table.dataframe .expanderSvg {\n",
       "    width: 8px;\n",
       "    height: 8px;\n",
       "    margin-right: 3px;\n",
       "}\n",
       "\n",
       "table.dataframe .expander {\n",
       "    display: flex;\n",
       "    align-items: center;\n",
       "}\n",
       "\n",
       "/* formatting */\n",
       "\n",
       "table.dataframe .null {\n",
       "    color: var(--text-color-pale);\n",
       "}\n",
       "\n",
       "table.dataframe .structural {\n",
       "    color: var(--text-color-medium);\n",
       "    font-weight: bold;\n",
       "}\n",
       "\n",
       "table.dataframe .dataFrameCaption {\n",
       "    font-weight: bold;\n",
       "}\n",
       "\n",
       "table.dataframe .numbers {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe td:hover .formatted .structural, .null {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe tr:hover .formatted .structural, .null {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "\n",
       "            </style>\n",
       "        </head>\n",
       "        <body>\n",
       "            <table class=\"dataframe\" id=\"static_df_536870937\"><thead><tr><th class=\"bottomBorder\" style=\"text-align:left\">name</th><th class=\"bottomBorder\" style=\"text-align:left\">starsCount</th><th class=\"bottomBorder\" style=\"text-align:left\">topics</th><th class=\"bottomBorder\" style=\"text-align:left\">isIntellij</th></tr></thead><tbody><tr><td  style=\"vertical-align:top\">ideavim</td><td  style=\"vertical-align:top\">6120</td><td  style=\"vertical-align:top\">[ideavim, intellij, intellij-platform<span class=\"structural\">...</span></td><td  style=\"vertical-align:top\">true</td></tr><tr><td  style=\"vertical-align:top\">MPS</td><td  style=\"vertical-align:top\">1241</td><td  style=\"vertical-align:top\">[domain-specific-language, dsl]</td><td  style=\"vertical-align:top\">false</td></tr><tr><td  style=\"vertical-align:top\">intellij-community</td><td  style=\"vertical-align:top\">12926</td><td  style=\"vertical-align:top\">[code-editor, ide, intellij, intellij<span class=\"structural\">...</span></td><td  style=\"vertical-align:top\">true</td></tr><tr><td  style=\"vertical-align:top\">intellij-scala</td><td  style=\"vertical-align:top\">1066</td><td  style=\"vertical-align:top\">[intellij-idea, intellij-plugin, scala]</td><td  style=\"vertical-align:top\">true</td></tr><tr><td  style=\"vertical-align:top\">kotlin</td><td  style=\"vertical-align:top\">39402</td><td  style=\"vertical-align:top\">[compiler, gradle-plugin, intellij-pl<span class=\"structural\">...</span></td><td  style=\"vertical-align:top\">false</td></tr><tr><td  style=\"vertical-align:top\">intellij-plugins</td><td  style=\"vertical-align:top\">1737</td><td  style=\"vertical-align:top\">[]</td><td  style=\"vertical-align:top\">true</td></tr><tr><td  style=\"vertical-align:top\">Exposed</td><td  style=\"vertical-align:top\">5688</td><td  style=\"vertical-align:top\">[dao, kotlin, orm, sql]</td><td  style=\"vertical-align:top\">false</td></tr><tr><td  style=\"vertical-align:top\">kotlin-web-site</td><td  style=\"vertical-align:top\">1074</td><td  style=\"vertical-align:top\">[kotlin]</td><td  style=\"vertical-align:top\">false</td></tr><tr><td  style=\"vertical-align:top\">idea-gitignore</td><td  style=\"vertical-align:top\">1181</td><td  style=\"vertical-align:top\">[gitignore, ignore-files, intellij, i<span class=\"structural\">...</span></td><td  style=\"vertical-align:top\">true</td></tr><tr><td  style=\"vertical-align:top\">swot</td><td  style=\"vertical-align:top\">1072</td><td  style=\"vertical-align:top\">[]</td><td  style=\"vertical-align:top\">false</td></tr><tr><td  style=\"vertical-align:top\">phpstorm-stubs</td><td  style=\"vertical-align:top\">1110</td><td  style=\"vertical-align:top\">[]</td><td  style=\"vertical-align:top\">false</td></tr><tr><td  style=\"vertical-align:top\">gradle-intellij-plugin</td><td  style=\"vertical-align:top\">1058</td><td  style=\"vertical-align:top\">[gradle, gradle-intellij-plugin, grad<span class=\"structural\">...</span></td><td  style=\"vertical-align:top\">true</td></tr><tr><td  style=\"vertical-align:top\">svg-sprite-loader</td><td  style=\"vertical-align:top\">1815</td><td  style=\"vertical-align:top\">[sprite, svg, svg-sprite, svg-stack, <span class=\"structural\">...</span></td><td  style=\"vertical-align:top\">false</td></tr><tr><td  style=\"vertical-align:top\">resharper-unity</td><td  style=\"vertical-align:top\">1017</td><td  style=\"vertical-align:top\">[hacktoberfest, jetbrains, plugin, re<span class=\"structural\">...</span></td><td  style=\"vertical-align:top\">false</td></tr><tr><td  style=\"vertical-align:top\">kotlin-native</td><td  style=\"vertical-align:top\">7101</td><td  style=\"vertical-align:top\">[c, compiler, kotlin, llvm, objective-c]</td><td  style=\"vertical-align:top\">false</td></tr><tr><td  style=\"vertical-align:top\">create-react-kotlin-app</td><td  style=\"vertical-align:top\">2424</td><td  style=\"vertical-align:top\">[create-react-app, jetbrains-ui, kotl<span class=\"structural\">...</span></td><td  style=\"vertical-align:top\">false</td></tr><tr><td  style=\"vertical-align:top\">ring-ui</td><td  style=\"vertical-align:top\">2836</td><td  style=\"vertical-align:top\">[components, jetbrains-ui, react]</td><td  style=\"vertical-align:top\">false</td></tr><tr><td  style=\"vertical-align:top\">kotlinconf-app</td><td  style=\"vertical-align:top\">2628</td><td  style=\"vertical-align:top\">[]</td><td  style=\"vertical-align:top\">false</td></tr><tr><td  style=\"vertical-align:top\">JetBrainsMono</td><td  style=\"vertical-align:top\">6059</td><td  style=\"vertical-align:top\">[coding-font, font, ligatures, monosp<span class=\"structural\">...</span></td><td  style=\"vertical-align:top\">false</td></tr><tr><td  style=\"vertical-align:top\">intellij-platform-plugin-template</td><td  style=\"vertical-align:top\">1133</td><td  style=\"vertical-align:top\">[intellij, intellij-idea, intellij-id<span class=\"structural\">...</span></td><td  style=\"vertical-align:top\">true</td></tr></tbody></table>\n",
       "        </body>\n",
       "        <script>\n",
       "            document.getElementById(\"static_df_536870937\").style.display = \"none\";\n",
       "        </script>\n",
       "        </html>"
      ],
      "application/kotlindataframe+json": "{\"$version\":\"2.1.1\",\"metadata\":{\"columns\":[\"name\",\"starsCount\",\"topics\",\"isIntellij\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.collections.List<kotlin.String>\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Boolean\"}],\"nrow\":24,\"ncol\":4},\"kotlin_dataframe\":[{\"name\":\"ideavim\",\"starsCount\":6120,\"topics\":[\"ideavim\",\"intellij\",\"intellij-platform\",\"jb-official\",\"kotlin\",\"vim\",\"vim-emulator\"],\"isIntellij\":true},{\"name\":\"MPS\",\"starsCount\":1241,\"topics\":[\"domain-specific-language\",\"dsl\"],\"isIntellij\":false},{\"name\":\"intellij-community\",\"starsCount\":12926,\"topics\":[\"code-editor\",\"ide\",\"intellij\",\"intellij-community\",\"intellij-platform\"],\"isIntellij\":true},{\"name\":\"intellij-scala\",\"starsCount\":1066,\"topics\":[\"intellij-idea\",\"intellij-plugin\",\"scala\"],\"isIntellij\":true},{\"name\":\"kotlin\",\"starsCount\":39402,\"topics\":[\"compiler\",\"gradle-plugin\",\"intellij-plugin\",\"kotlin\",\"kotlin-library\",\"maven-plugin\",\"programming-language\"],\"isIntellij\":false},{\"name\":\"intellij-plugins\",\"starsCount\":1737,\"topics\":[\"\"],\"isIntellij\":true},{\"name\":\"Exposed\",\"starsCount\":5688,\"topics\":[\"dao\",\"kotlin\",\"orm\",\"sql\"],\"isIntellij\":false},{\"name\":\"kotlin-web-site\",\"starsCount\":1074,\"topics\":[\"kotlin\"],\"isIntellij\":false},{\"name\":\"idea-gitignore\",\"starsCount\":1181,\"topics\":[\"gitignore\",\"ignore-files\",\"intellij\",\"intellij-plugin\",\"java\"],\"isIntellij\":true},{\"name\":\"swot\",\"starsCount\":1072,\"topics\":[\"\"],\"isIntellij\":false},{\"name\":\"phpstorm-stubs\",\"starsCount\":1110,\"topics\":[\"\"],\"isIntellij\":false},{\"name\":\"gradle-intellij-plugin\",\"starsCount\":1058,\"topics\":[\"gradle\",\"gradle-intellij-plugin\",\"gradle-kotlin-dsl\",\"groovy\",\"intellij\",\"intellij-ides\",\"intellij-platform\",\"intellij-plugin\",\"intellij-sdk\",\"jetbrains-plugin\",\"kotlin\",\"plugin-verifier\",\"publishing-dsl\",\"setup-dsl\",\"teamcity\",\"travis-configuration\"],\"isIntellij\":true},{\"name\":\"svg-sprite-loader\",\"starsCount\":1815,\"topics\":[\"sprite\",\"svg\",\"svg-sprite\",\"svg-stack\",\"webpack\",\"webpack-loader\",\"webpack-plugin\",\"webpack2\",\"webpack3\"],\"isIntellij\":false},{\"name\":\"resharper-unity\",\"starsCount\":1017,\"topics\":[\"hacktoberfest\",\"jetbrains\",\"plugin\",\"resharper\",\"resharper-plugin\",\"rider\",\"unity\",\"unity-editor\"],\"isIntellij\":false},{\"name\":\"kotlin-native\",\"starsCount\":7101,\"topics\":[\"c\",\"compiler\",\"kotlin\",\"llvm\",\"objective-c\"],\"isIntellij\":false},{\"name\":\"create-react-kotlin-app\",\"starsCount\":2424,\"topics\":[\"create-react-app\",\"jetbrains-ui\",\"kotlin\",\"react\",\"webpack\"],\"isIntellij\":false},{\"name\":\"ring-ui\",\"starsCount\":2836,\"topics\":[\"components\",\"jetbrains-ui\",\"react\"],\"isIntellij\":false},{\"name\":\"kotlinconf-app\",\"starsCount\":2628,\"topics\":[\"\"],\"isIntellij\":false},{\"name\":\"JetBrainsMono\",\"starsCount\":6059,\"topics\":[\"coding-font\",\"font\",\"ligatures\",\"monospaced-font\",\"programming-font\",\"programming-ligatures\"],\"isIntellij\":false},{\"name\":\"intellij-platform-plugin-template\",\"starsCount\":1133,\"topics\":[\"intellij\",\"intellij-idea\",\"intellij-idea-plugin\",\"intellij-platform\",\"intellij-plugin\",\"intellij-plugins\",\"jetbrains-plugin\"],\"isIntellij\":true}]}"
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 10
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "## Grouping And Aggregating"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "A `DataFrame` can be grouped by column keys, meaning its rows are split into groups based on the values in the key columns.\n",
    "The `.groupBy { }` operation selects columns and groups the `DataFrame` by their values, using them as grouping keys.\n",
    "\n",
    "The result is a `GroupBy` — a `DataFrame`-like structure that associates each key with the corresponding subset of the original `DataFrame`.\n",
    "\n",
    "Group `dfWithIsIntellij` by \"isIntellij\":"
   ]
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-01T13:42:33.786349Z",
     "start_time": "2025-05-01T13:42:33.748673Z"
    }
   },
   "cell_type": "code",
   "source": [
    "val groupedByIsIntellij = dfWithIsIntellij.groupBy { isIntellij }\n",
    "groupedByIsIntellij"
   ],
   "outputs": [
    {
     "data": {
      "text/html": [
       "            <iframe onload=\"o_resize_iframe_out_15()\" style=\"width:100%;\" class=\"result_container\" id=\"iframe_out_15\" frameBorder=\"0\" srcdoc=\"        &lt;html theme='dark'&gt;\n",
       "        &lt;head&gt;\n",
       "            &lt;style type=&quot;text&sol;css&quot;&gt;\n",
       "                :root {\n",
       "    --background: #fff;\n",
       "    --background-odd: #f5f5f5;\n",
       "    --background-hover: #d9edfd;\n",
       "    --header-text-color: #474747;\n",
       "    --text-color: #848484;\n",
       "    --text-color-dark: #000;\n",
       "    --text-color-medium: #737373;\n",
       "    --text-color-pale: #b3b3b3;\n",
       "    --inner-border-color: #aaa;\n",
       "    --bold-border-color: #000;\n",
       "    --link-color: #296eaa;\n",
       "    --link-color-pale: #296eaa;\n",
       "    --link-hover: #1a466c;\n",
       "}\n",
       "\n",
       ":root[theme=&quot;dark&quot;], :root [data-jp-theme-light=&quot;false&quot;], .dataframe_dark{\n",
       "    --background: #303030;\n",
       "    --background-odd: #3c3c3c;\n",
       "    --background-hover: #464646;\n",
       "    --header-text-color: #dddddd;\n",
       "    --text-color: #b3b3b3;\n",
       "    --text-color-dark: #dddddd;\n",
       "    --text-color-medium: #b2b2b2;\n",
       "    --text-color-pale: #737373;\n",
       "    --inner-border-color: #707070;\n",
       "    --bold-border-color: #777777;\n",
       "    --link-color: #008dc0;\n",
       "    --link-color-pale: #97e1fb;\n",
       "    --link-hover: #00688e;\n",
       "}\n",
       "\n",
       "p.dataframe_description {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe {\n",
       "    font-family: &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif;\n",
       "    font-size: 12px;\n",
       "    background-color: var(--background);\n",
       "    color: var(--text-color-dark);\n",
       "    border: none;\n",
       "    border-collapse: collapse;\n",
       "}\n",
       "\n",
       "table.dataframe th, td {\n",
       "    padding: 6px;\n",
       "    border: 1px solid transparent;\n",
       "    text-align: left;\n",
       "}\n",
       "\n",
       "table.dataframe th {\n",
       "    background-color: var(--background);\n",
       "    color: var(--header-text-color);\n",
       "}\n",
       "\n",
       "table.dataframe td {\n",
       "    vertical-align: top;\n",
       "    white-space: nowrap;\n",
       "}\n",
       "\n",
       "table.dataframe th.bottomBorder {\n",
       "    border-bottom-color: var(--bold-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe tbody &gt; tr:nth-child(odd) {\n",
       "    background: var(--background-odd);\n",
       "}\n",
       "\n",
       "table.dataframe tbody &gt; tr:nth-child(even) {\n",
       "    background: var(--background);\n",
       "}\n",
       "\n",
       "table.dataframe tbody &gt; tr:hover {\n",
       "    background: var(--background-hover);\n",
       "}\n",
       "\n",
       "table.dataframe a {\n",
       "    cursor: pointer;\n",
       "    color: var(--link-color);\n",
       "    text-decoration: none;\n",
       "}\n",
       "\n",
       "table.dataframe tr:hover &gt; td a {\n",
       "    color: var(--link-color-pale);\n",
       "}\n",
       "\n",
       "table.dataframe a:hover {\n",
       "    color: var(--link-hover);\n",
       "    text-decoration: underline;\n",
       "}\n",
       "\n",
       "table.dataframe img {\n",
       "    max-width: fit-content;\n",
       "}\n",
       "\n",
       "table.dataframe th.complex {\n",
       "    background-color: var(--background);\n",
       "    border: 1px solid var(--background);\n",
       "}\n",
       "\n",
       "table.dataframe .leftBorder {\n",
       "    border-left-color: var(--inner-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe .rightBorder {\n",
       "    border-right-color: var(--inner-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe .rightAlign {\n",
       "    text-align: right;\n",
       "}\n",
       "\n",
       "table.dataframe .expanderSvg {\n",
       "    width: 8px;\n",
       "    height: 8px;\n",
       "    margin-right: 3px;\n",
       "}\n",
       "\n",
       "table.dataframe .expander {\n",
       "    display: flex;\n",
       "    align-items: center;\n",
       "}\n",
       "\n",
       "&sol;* formatting *&sol;\n",
       "\n",
       "table.dataframe .null {\n",
       "    color: var(--text-color-pale);\n",
       "}\n",
       "\n",
       "table.dataframe .structural {\n",
       "    color: var(--text-color-medium);\n",
       "    font-weight: bold;\n",
       "}\n",
       "\n",
       "table.dataframe .dataFrameCaption {\n",
       "    font-weight: bold;\n",
       "}\n",
       "\n",
       "table.dataframe .numbers {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe td:hover .formatted .structural, .null {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe tr:hover .formatted .structural, .null {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "\n",
       ":root {\n",
       "    --scroll-bg: #f5f5f5;\n",
       "    --scroll-fg: #b3b3b3;\n",
       "}\n",
       ":root[theme=&quot;dark&quot;], :root [data-jp-theme-light=&quot;false&quot;]{\n",
       "    --scroll-bg: #3c3c3c;\n",
       "    --scroll-fg: #97e1fb;\n",
       "}\n",
       "body {\n",
       "    scrollbar-color: var(--scroll-fg) var(--scroll-bg);\n",
       "}\n",
       "body::-webkit-scrollbar {\n",
       "    width: 10px; &sol;* Mostly for vertical scrollbars *&sol;\n",
       "    height: 10px; &sol;* Mostly for horizontal scrollbars *&sol;\n",
       "}\n",
       "body::-webkit-scrollbar-thumb {\n",
       "    background-color: var(--scroll-fg);\n",
       "}\n",
       "body::-webkit-scrollbar-track {\n",
       "    background-color: var(--scroll-bg);\n",
       "}\n",
       "            &lt;&sol;style&gt;\n",
       "        &lt;&sol;head&gt;\n",
       "        &lt;body&gt;\n",
       "            &lt;table class=&quot;dataframe&quot; id=&quot;df_536870940&quot;&gt;&lt;&sol;table&gt;\n",
       "\n",
       "&lt;p class=&quot;dataframe_description&quot;&gt;GroupBy&lt;&sol;p&gt;\n",
       "\n",
       "        &lt;&sol;body&gt;\n",
       "        &lt;script&gt;\n",
       "            (function () {\n",
       "    window.DataFrame = window.DataFrame || new (function () {\n",
       "        this.addTable = function (df) {\n",
       "            let cols = df.cols;\n",
       "            for (let i = 0; i &lt; cols.length; i++) {\n",
       "                for (let c of cols[i].children) {\n",
       "                    cols[c].parent = i;\n",
       "                }\n",
       "            }\n",
       "            df.nrow = 0\n",
       "            for (let i = 0; i &lt; df.cols.length; i++) {\n",
       "                if (df.cols[i].values.length &gt; df.nrow) df.nrow = df.cols[i].values.length\n",
       "            }\n",
       "            if (df.id === df.rootId) {\n",
       "                df.expandedFrames = new Set()\n",
       "                df.childFrames = {}\n",
       "                const table = this.getTableElement(df.id)\n",
       "                table.df = df\n",
       "                for (let i = 0; i &lt; df.cols.length; i++) {\n",
       "                    let col = df.cols[i]\n",
       "                    if (col.parent === undefined &amp;&amp; col.children.length &gt; 0) col.expanded = true\n",
       "                }\n",
       "            } else {\n",
       "                const rootDf = this.getTableData(df.rootId)\n",
       "                rootDf.childFrames[df.id] = df\n",
       "            }\n",
       "        }\n",
       "\n",
       "        this.computeRenderData = function (df) {\n",
       "            let result = []\n",
       "            let pos = 0\n",
       "            for (let col = 0; col &lt; df.cols.length; col++) {\n",
       "                if (df.cols[col].parent === undefined)\n",
       "                    pos += this.computeRenderDataRec(df.cols, col, pos, 0, result, false, false)\n",
       "            }\n",
       "            for (let i = 0; i &lt; result.length; i++) {\n",
       "                let row = result[i]\n",
       "                for (let j = 0; j &lt; row.length; j++) {\n",
       "                    let cell = row[j]\n",
       "                    if (j === 0)\n",
       "                        cell.leftBd = false\n",
       "                    if (j &lt; row.length - 1) {\n",
       "                        let nextData = row[j + 1]\n",
       "                        if (nextData.leftBd) cell.rightBd = true\n",
       "                        else if (cell.rightBd) nextData.leftBd = true\n",
       "                    } else cell.rightBd = false\n",
       "                }\n",
       "            }\n",
       "            return result\n",
       "        }\n",
       "\n",
       "        this.computeRenderDataRec = function (cols, colId, pos, depth, result, leftBorder, rightBorder) {\n",
       "            if (result.length === depth) {\n",
       "                const array = [];\n",
       "                if (pos &gt; 0) {\n",
       "                    let j = 0\n",
       "                    for (let i = 0; j &lt; pos; i++) {\n",
       "                        let c = result[depth - 1][i]\n",
       "                        j += c.span\n",
       "                        let copy = Object.assign({empty: true}, c)\n",
       "                        array.push(copy)\n",
       "                    }\n",
       "                }\n",
       "                result.push(array)\n",
       "            }\n",
       "            const col = cols[colId];\n",
       "            let size = 0;\n",
       "            if (col.expanded) {\n",
       "                let childPos = pos\n",
       "                for (let i = 0; i &lt; col.children.length; i++) {\n",
       "                    let child = col.children[i]\n",
       "                    let childLeft = i === 0 &amp;&amp; (col.children.length &gt; 1 || leftBorder)\n",
       "                    let childRight = i === col.children.length - 1 &amp;&amp; (col.children.length &gt; 1 || rightBorder)\n",
       "                    let childSize = this.computeRenderDataRec(cols, child, childPos, depth + 1, result, childLeft, childRight)\n",
       "                    childPos += childSize\n",
       "                    size += childSize\n",
       "                }\n",
       "            } else {\n",
       "                for (let i = depth + 1; i &lt; result.length; i++)\n",
       "                    result[i].push({id: colId, span: 1, leftBd: leftBorder, rightBd: rightBorder, empty: true})\n",
       "                size = 1\n",
       "            }\n",
       "            let left = leftBorder\n",
       "            let right = rightBorder\n",
       "            if (size &gt; 1) {\n",
       "                left = true\n",
       "                right = true\n",
       "            }\n",
       "            result[depth].push({id: colId, span: size, leftBd: left, rightBd: right})\n",
       "            return size\n",
       "        }\n",
       "\n",
       "        this.getTableElement = function (id) {\n",
       "            return document.getElementById(&quot;df_&quot; + id)\n",
       "        }\n",
       "\n",
       "        this.getTableData = function (id) {\n",
       "            return this.getTableElement(id).df\n",
       "        }\n",
       "\n",
       "        this.createExpander = function (isExpanded) {\n",
       "            const svgNs = &quot;http:&sol;&sol;www.w3.org&sol;2000&sol;svg&quot;\n",
       "            let svg = document.createElementNS(svgNs, &quot;svg&quot;)\n",
       "            svg.classList.add(&quot;expanderSvg&quot;)\n",
       "            let path = document.createElementNS(svgNs, &quot;path&quot;)\n",
       "            if (isExpanded) {\n",
       "                svg.setAttribute(&quot;viewBox&quot;, &quot;0 -2 8 8&quot;)\n",
       "                path.setAttribute(&quot;d&quot;, &quot;M1 0 l-1 1 4 4 4 -4 -1 -1 -3 3Z&quot;)\n",
       "            } else {\n",
       "                svg.setAttribute(&quot;viewBox&quot;, &quot;-2 0 8 8&quot;)\n",
       "                path.setAttribute(&quot;d&quot;, &quot;M1 0 l-1 1 3 3 -3 3 1 1 4 -4Z&quot;)\n",
       "            }\n",
       "            path.setAttribute(&quot;fill&quot;, &quot;currentColor&quot;)\n",
       "            svg.appendChild(path)\n",
       "            return svg\n",
       "        }\n",
       "\n",
       "        this.renderTable = function (id) {\n",
       "\n",
       "            let table = this.getTableElement(id)\n",
       "\n",
       "            if (table === null) return\n",
       "\n",
       "            table.innerHTML = &quot;&quot;\n",
       "\n",
       "            let df = table.df\n",
       "            let rootDf = df.rootId === df.id ? df : this.getTableData(df.rootId)\n",
       "\n",
       "            &sol;&sol; header\n",
       "            let header = document.createElement(&quot;thead&quot;)\n",
       "            table.appendChild(header)\n",
       "\n",
       "            let renderData = this.computeRenderData(df)\n",
       "            for (let j = 0; j &lt; renderData.length; j++) {\n",
       "                let rowData = renderData[j]\n",
       "                let tr = document.createElement(&quot;tr&quot;);\n",
       "                let isLastRow = j === renderData.length - 1\n",
       "                header.appendChild(tr);\n",
       "                for (let i = 0; i &lt; rowData.length; i++) {\n",
       "                    let cell = rowData[i]\n",
       "                    let th = document.createElement(&quot;th&quot;);\n",
       "                    th.setAttribute(&quot;colspan&quot;, cell.span)\n",
       "                    let colId = cell.id\n",
       "                    let col = df.cols[colId];\n",
       "                    if (!cell.empty) {\n",
       "                        if (col.children.length === 0) {\n",
       "                            th.innerHTML = col.name\n",
       "                        } else {\n",
       "                            let link = document.createElement(&quot;a&quot;)\n",
       "                            link.className = &quot;expander&quot;\n",
       "                            let that = this\n",
       "                            link.onclick = function () {\n",
       "                                col.expanded = !col.expanded\n",
       "                                that.renderTable(id)\n",
       "                            }\n",
       "                            link.appendChild(this.createExpander(col.expanded))\n",
       "                            link.innerHTML += col.name\n",
       "                            th.appendChild(link)\n",
       "                        }\n",
       "                    }\n",
       "                    let classes = (cell.leftBd ? &quot; leftBorder&quot; : &quot;&quot;) + (cell.rightBd ? &quot; rightBorder&quot; : &quot;&quot;)\n",
       "                    if (col.rightAlign)\n",
       "                        classes += &quot; rightAlign&quot;\n",
       "                    if (isLastRow)\n",
       "                        classes += &quot; bottomBorder&quot;\n",
       "                    if (classes.length &gt; 0)\n",
       "                        th.setAttribute(&quot;class&quot;, classes)\n",
       "                    tr.appendChild(th)\n",
       "                }\n",
       "            }\n",
       "\n",
       "            &sol;&sol; body\n",
       "            let body = document.createElement(&quot;tbody&quot;)\n",
       "            table.appendChild(body)\n",
       "\n",
       "            let columns = renderData.pop()\n",
       "            for (let row = 0; row &lt; df.nrow; row++) {\n",
       "                let tr = document.createElement(&quot;tr&quot;);\n",
       "                body.appendChild(tr)\n",
       "                for (let i = 0; i &lt; columns.length; i++) {\n",
       "                    let cell = columns[i]\n",
       "                    let td = document.createElement(&quot;td&quot;);\n",
       "                    let colId = cell.id\n",
       "                    let col = df.cols[colId]\n",
       "                    let classes = (cell.leftBd ? &quot; leftBorder&quot; : &quot;&quot;) + (cell.rightBd ? &quot; rightBorder&quot; : &quot;&quot;)\n",
       "                    if (col.rightAlign)\n",
       "                        classes += &quot; rightAlign&quot;\n",
       "                    if (classes.length &gt; 0)\n",
       "                        td.setAttribute(&quot;class&quot;, classes)\n",
       "                    tr.appendChild(td)\n",
       "                    let value = col.values[row]\n",
       "                    if (value.frameId !== undefined) {\n",
       "                        let frameId = value.frameId\n",
       "                        let expanded = rootDf.expandedFrames.has(frameId)\n",
       "                        let link = document.createElement(&quot;a&quot;)\n",
       "                        link.className = &quot;expander&quot;\n",
       "                        let that = this\n",
       "                        link.onclick = function () {\n",
       "                            if (rootDf.expandedFrames.has(frameId))\n",
       "                                rootDf.expandedFrames.delete(frameId)\n",
       "                            else rootDf.expandedFrames.add(frameId)\n",
       "                            that.renderTable(id)\n",
       "                        }\n",
       "                        link.appendChild(this.createExpander(expanded))\n",
       "                        link.innerHTML += value.value\n",
       "                        if (expanded) {\n",
       "                            td.appendChild(link)\n",
       "                            td.appendChild(document.createElement(&quot;p&quot;))\n",
       "                            const childTable = document.createElement(&quot;table&quot;)\n",
       "                            childTable.className = &quot;dataframe&quot;\n",
       "                            childTable.id = &quot;df_&quot; + frameId\n",
       "                            let childDf = rootDf.childFrames[frameId]\n",
       "                            childTable.df = childDf\n",
       "                            td.appendChild(childTable)\n",
       "                            this.renderTable(frameId)\n",
       "                            if (childDf.nrow !== childDf.totalRows) {\n",
       "                                const footer = document.createElement(&quot;p&quot;)\n",
       "                                footer.innerText = `... showing only top ${childDf.nrow} of ${childDf.totalRows} rows`\n",
       "                                td.appendChild(footer)\n",
       "                            }\n",
       "                        } else {\n",
       "                            td.appendChild(link)\n",
       "                        }\n",
       "                    } else if (value.style !== undefined) {\n",
       "                        td.innerHTML = value.value\n",
       "                        td.setAttribute(&quot;style&quot;, value.style)\n",
       "                    } else td.innerHTML = value\n",
       "                    this.nodeScriptReplace(td)\n",
       "                }\n",
       "            }\n",
       "        }\n",
       "\n",
       "        this.nodeScriptReplace = function (node) {\n",
       "            if (this.nodeScriptIs(node) === true) {\n",
       "                node.parentNode.replaceChild(this.nodeScriptClone(node), node);\n",
       "            } else {\n",
       "                let i = -1, children = node.childNodes;\n",
       "                while (++i &lt; children.length) {\n",
       "                    this.nodeScriptReplace(children[i]);\n",
       "                }\n",
       "            }\n",
       "\n",
       "            return node;\n",
       "        }\n",
       "\n",
       "        this.nodeScriptClone = function (node) {\n",
       "            let script = document.createElement(&quot;script&quot;);\n",
       "            script.text = node.innerHTML;\n",
       "\n",
       "            let i = -1, attrs = node.attributes, attr;\n",
       "            while (++i &lt; attrs.length) {\n",
       "                script.setAttribute((attr = attrs[i]).name, attr.value);\n",
       "            }\n",
       "            return script;\n",
       "        }\n",
       "\n",
       "        this.nodeScriptIs = function (node) {\n",
       "            return node.tagName === 'SCRIPT';\n",
       "        }\n",
       "    })()\n",
       "\n",
       "    window.call_DataFrame = function (f) {\n",
       "        return f();\n",
       "    };\n",
       "\n",
       "    let funQueue = window[&quot;kotlinQueues&quot;] &amp;&amp; window[&quot;kotlinQueues&quot;][&quot;DataFrame&quot;];\n",
       "    if (funQueue) {\n",
       "        funQueue.forEach(function (f) {\n",
       "            f();\n",
       "        });\n",
       "        funQueue = [];\n",
       "    }\n",
       "})()\n",
       "\n",
       "&sol;*&lt;!--*&sol;\n",
       "call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: &quot;&lt;span title=&bsol;&quot;isIntellij: Boolean&bsol;&quot;&gt;isIntellij&lt;&sol;span&gt;&quot;, children: [], rightAlign: false, values: [&quot;true&quot;,&quot;false&quot;] }, \n",
       "{ name: &quot;&lt;span title=&bsol;&quot;group: DataFrame&lt;*&gt;&bsol;&quot;&gt;group&lt;&sol;span&gt;&quot;, children: [], rightAlign: false, values: [{ frameId: 536870941, value: &quot;&lt;b&gt;DataFrame 7 x 4&lt;&sol;b&gt;&quot; },{ frameId: 536870942, value: &quot;&lt;b&gt;DataFrame 17 x 4&lt;&sol;b&gt;&quot; }] }, \n",
       "], id: 536870940, rootId: 536870940, totalRows: 2 } ) });\n",
       "&sol;*--&gt;*&sol;\n",
       "\n",
       "&sol;*&lt;!--*&sol;\n",
       "call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: &quot;&lt;span title=&bsol;&quot;name: String&bsol;&quot;&gt;name&lt;&sol;span&gt;&quot;, children: [], rightAlign: false, values: [&quot;ideavim&quot;,&quot;intellij-community&quot;,&quot;intellij-scala&quot;,&quot;intellij-plugins&quot;,&quot;idea-gitignore&quot;] }, \n",
       "{ name: &quot;&lt;span title=&bsol;&quot;starsCount: Int&bsol;&quot;&gt;starsCount&lt;&sol;span&gt;&quot;, children: [], rightAlign: true, values: [&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;6120&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;12926&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;1066&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;1737&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;1181&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;] }, \n",
       "{ name: &quot;&lt;span title=&bsol;&quot;topics: List&lt;String&gt;&bsol;&quot;&gt;topics&lt;&sol;span&gt;&quot;, children: [], rightAlign: false, values: [&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;ideavim&bsol;nintellij&bsol;nintellij-platform&bsol;njb-official&bsol;nkotlin&bsol;nvim&bsol;nvim-emulator&bsol;&quot;&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;[&lt;&sol;span&gt;ideavim&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;intellij&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;intellij-pl&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;]&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;code-editor&bsol;nide&bsol;nintellij&bsol;nintellij-community&bsol;nintellij-platform&bsol;&quot;&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;[&lt;&sol;span&gt;code-editor&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;ide&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;intellij&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;i&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;i&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;]&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;intellij-idea&bsol;nintellij-plugin&bsol;nscala&bsol;&quot;&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;[&lt;&sol;span&gt;intellij-idea&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;intellij-plugin&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;scala&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;]&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;[&lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;]&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;gitignore&bsol;nignore-files&bsol;nintellij&bsol;nintellij-plugin&bsol;njava&bsol;&quot;&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;[&lt;&sol;span&gt;gitignore&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;ignore-files&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;intellij&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;]&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;] }, \n",
       "{ name: &quot;&lt;span title=&bsol;&quot;isIntellij: Boolean&bsol;&quot;&gt;isIntellij&lt;&sol;span&gt;&quot;, children: [], rightAlign: false, values: [&quot;true&quot;,&quot;true&quot;,&quot;true&quot;,&quot;true&quot;,&quot;true&quot;] }, \n",
       "], id: 536870941, rootId: 536870940, totalRows: 7 } ) });\n",
       "&sol;*--&gt;*&sol;\n",
       "\n",
       "&sol;*&lt;!--*&sol;\n",
       "call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: &quot;&lt;span title=&bsol;&quot;name: String&bsol;&quot;&gt;name&lt;&sol;span&gt;&quot;, children: [], rightAlign: false, values: [&quot;MPS&quot;,&quot;kotlin&quot;,&quot;Exposed&quot;,&quot;kotlin-web-site&quot;,&quot;swot&quot;] }, \n",
       "{ name: &quot;&lt;span title=&bsol;&quot;starsCount: Int&bsol;&quot;&gt;starsCount&lt;&sol;span&gt;&quot;, children: [], rightAlign: true, values: [&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;1241&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;39402&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;5688&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;1074&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;1072&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;] }, \n",
       "{ name: &quot;&lt;span title=&bsol;&quot;topics: List&lt;String&gt;&bsol;&quot;&gt;topics&lt;&sol;span&gt;&quot;, children: [], rightAlign: false, values: [&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;domain-specific-language&bsol;ndsl&bsol;&quot;&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;[&lt;&sol;span&gt;domain-specific-language&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;dsl&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;]&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;compiler&bsol;ngradle-plugin&bsol;nintellij-plugin&bsol;nkotlin&bsol;nkotlin-library&bsol;nmaven-plugin&bsol;nprogramming-language&bsol;&quot;&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;[&lt;&sol;span&gt;compiler&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;gradle-plugin&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;intel&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;]&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;dao&bsol;nkotlin&bsol;norm&bsol;nsql&bsol;&quot;&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;[&lt;&sol;span&gt;dao&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;kotlin&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;orm&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;sql&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;]&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;kotlin&bsol;&quot;&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;[&lt;&sol;span&gt;kotlin&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;]&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;[&lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;]&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;] }, \n",
       "{ name: &quot;&lt;span title=&bsol;&quot;isIntellij: Boolean&bsol;&quot;&gt;isIntellij&lt;&sol;span&gt;&quot;, children: [], rightAlign: false, values: [&quot;false&quot;,&quot;false&quot;,&quot;false&quot;,&quot;false&quot;,&quot;false&quot;] }, \n",
       "], id: 536870942, rootId: 536870940, totalRows: 17 } ) });\n",
       "&sol;*--&gt;*&sol;\n",
       "\n",
       "call_DataFrame(function() { DataFrame.renderTable(536870940) });\n",
       "\n",
       "\n",
       "        &lt;&sol;script&gt;\n",
       "        &lt;&sol;html&gt;\"></iframe>\n",
       "            <script>\n",
       "                function o_resize_iframe_out_15() {\n",
       "                    let elem = document.getElementById(\"iframe_out_15\");\n",
       "                    resize_iframe_out_15(elem);\n",
       "                    setInterval(resize_iframe_out_15, 5000, elem);\n",
       "                }\n",
       "                function resize_iframe_out_15(el) {\n",
       "                    let h = el.contentWindow.document.body.scrollHeight;\n",
       "                    el.height = h === 0 ? 0 : h + 41;\n",
       "                }\n",
       "            </script>        <html theme='dark'>\n",
       "        <head>\n",
       "            <style type=\"text/css\">\n",
       "                :root {\n",
       "    --background: #fff;\n",
       "    --background-odd: #f5f5f5;\n",
       "    --background-hover: #d9edfd;\n",
       "    --header-text-color: #474747;\n",
       "    --text-color: #848484;\n",
       "    --text-color-dark: #000;\n",
       "    --text-color-medium: #737373;\n",
       "    --text-color-pale: #b3b3b3;\n",
       "    --inner-border-color: #aaa;\n",
       "    --bold-border-color: #000;\n",
       "    --link-color: #296eaa;\n",
       "    --link-color-pale: #296eaa;\n",
       "    --link-hover: #1a466c;\n",
       "}\n",
       "\n",
       ":root[theme=\"dark\"], :root [data-jp-theme-light=\"false\"], .dataframe_dark{\n",
       "    --background: #303030;\n",
       "    --background-odd: #3c3c3c;\n",
       "    --background-hover: #464646;\n",
       "    --header-text-color: #dddddd;\n",
       "    --text-color: #b3b3b3;\n",
       "    --text-color-dark: #dddddd;\n",
       "    --text-color-medium: #b2b2b2;\n",
       "    --text-color-pale: #737373;\n",
       "    --inner-border-color: #707070;\n",
       "    --bold-border-color: #777777;\n",
       "    --link-color: #008dc0;\n",
       "    --link-color-pale: #97e1fb;\n",
       "    --link-hover: #00688e;\n",
       "}\n",
       "\n",
       "p.dataframe_description {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe {\n",
       "    font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n",
       "    font-size: 12px;\n",
       "    background-color: var(--background);\n",
       "    color: var(--text-color-dark);\n",
       "    border: none;\n",
       "    border-collapse: collapse;\n",
       "}\n",
       "\n",
       "table.dataframe th, td {\n",
       "    padding: 6px;\n",
       "    border: 1px solid transparent;\n",
       "    text-align: left;\n",
       "}\n",
       "\n",
       "table.dataframe th {\n",
       "    background-color: var(--background);\n",
       "    color: var(--header-text-color);\n",
       "}\n",
       "\n",
       "table.dataframe td {\n",
       "    vertical-align: top;\n",
       "    white-space: nowrap;\n",
       "}\n",
       "\n",
       "table.dataframe th.bottomBorder {\n",
       "    border-bottom-color: var(--bold-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe tbody > tr:nth-child(odd) {\n",
       "    background: var(--background-odd);\n",
       "}\n",
       "\n",
       "table.dataframe tbody > tr:nth-child(even) {\n",
       "    background: var(--background);\n",
       "}\n",
       "\n",
       "table.dataframe tbody > tr:hover {\n",
       "    background: var(--background-hover);\n",
       "}\n",
       "\n",
       "table.dataframe a {\n",
       "    cursor: pointer;\n",
       "    color: var(--link-color);\n",
       "    text-decoration: none;\n",
       "}\n",
       "\n",
       "table.dataframe tr:hover > td a {\n",
       "    color: var(--link-color-pale);\n",
       "}\n",
       "\n",
       "table.dataframe a:hover {\n",
       "    color: var(--link-hover);\n",
       "    text-decoration: underline;\n",
       "}\n",
       "\n",
       "table.dataframe img {\n",
       "    max-width: fit-content;\n",
       "}\n",
       "\n",
       "table.dataframe th.complex {\n",
       "    background-color: var(--background);\n",
       "    border: 1px solid var(--background);\n",
       "}\n",
       "\n",
       "table.dataframe .leftBorder {\n",
       "    border-left-color: var(--inner-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe .rightBorder {\n",
       "    border-right-color: var(--inner-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe .rightAlign {\n",
       "    text-align: right;\n",
       "}\n",
       "\n",
       "table.dataframe .expanderSvg {\n",
       "    width: 8px;\n",
       "    height: 8px;\n",
       "    margin-right: 3px;\n",
       "}\n",
       "\n",
       "table.dataframe .expander {\n",
       "    display: flex;\n",
       "    align-items: center;\n",
       "}\n",
       "\n",
       "/* formatting */\n",
       "\n",
       "table.dataframe .null {\n",
       "    color: var(--text-color-pale);\n",
       "}\n",
       "\n",
       "table.dataframe .structural {\n",
       "    color: var(--text-color-medium);\n",
       "    font-weight: bold;\n",
       "}\n",
       "\n",
       "table.dataframe .dataFrameCaption {\n",
       "    font-weight: bold;\n",
       "}\n",
       "\n",
       "table.dataframe .numbers {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe td:hover .formatted .structural, .null {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe tr:hover .formatted .structural, .null {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "\n",
       "            </style>\n",
       "        </head>\n",
       "        <body>\n",
       "            <table class=\"dataframe\" id=\"static_df_536870943\"><thead><tr><th class=\"bottomBorder\" style=\"text-align:left\">isIntellij</th><th class=\"bottomBorder\" style=\"text-align:left\">group</th></tr></thead><tbody><tr><td  style=\"vertical-align:top\">true</td><td  style=\"vertical-align:top\"><details><summary>DataFrame [7 x 4]</summary><table class=\"dataframe\" id=\"static_df_536870944\"><thead><tr><th class=\"bottomBorder\" style=\"text-align:left\">name</th><th class=\"bottomBorder\" style=\"text-align:left\">starsCount</th><th class=\"bottomBorder\" style=\"text-align:left\">topics</th><th class=\"bottomBorder\" style=\"text-align:left\">isIntellij</th></tr></thead><tbody><tr><td  style=\"vertical-align:top\">ideavim</td><td  style=\"vertical-align:top\">6120</td><td  style=\"vertical-align:top\">[ideavim, intellij, intellij-platform<span class=\"structural\">...</span></td><td  style=\"vertical-align:top\">true</td></tr><tr><td  style=\"vertical-align:top\">intellij-community</td><td  style=\"vertical-align:top\">12926</td><td  style=\"vertical-align:top\">[code-editor, ide, intellij, intellij<span class=\"structural\">...</span></td><td  style=\"vertical-align:top\">true</td></tr><tr><td  style=\"vertical-align:top\">intellij-scala</td><td  style=\"vertical-align:top\">1066</td><td  style=\"vertical-align:top\">[intellij-idea, intellij-plugin, scala]</td><td  style=\"vertical-align:top\">true</td></tr><tr><td  style=\"vertical-align:top\">intellij-plugins</td><td  style=\"vertical-align:top\">1737</td><td  style=\"vertical-align:top\">[]</td><td  style=\"vertical-align:top\">true</td></tr><tr><td  style=\"vertical-align:top\">idea-gitignore</td><td  style=\"vertical-align:top\">1181</td><td  style=\"vertical-align:top\">[gitignore, ignore-files, intellij, i<span class=\"structural\">...</span></td><td  style=\"vertical-align:top\">true</td></tr></tbody></table><p>... showing only top 5 of 7 rows</p></details></td></tr><tr><td  style=\"vertical-align:top\">false</td><td  style=\"vertical-align:top\"><details><summary>DataFrame [17 x 4]</summary><table class=\"dataframe\" id=\"static_df_536870945\"><thead><tr><th class=\"bottomBorder\" style=\"text-align:left\">name</th><th class=\"bottomBorder\" style=\"text-align:left\">starsCount</th><th class=\"bottomBorder\" style=\"text-align:left\">topics</th><th class=\"bottomBorder\" style=\"text-align:left\">isIntellij</th></tr></thead><tbody><tr><td  style=\"vertical-align:top\">MPS</td><td  style=\"vertical-align:top\">1241</td><td  style=\"vertical-align:top\">[domain-specific-language, dsl]</td><td  style=\"vertical-align:top\">false</td></tr><tr><td  style=\"vertical-align:top\">kotlin</td><td  style=\"vertical-align:top\">39402</td><td  style=\"vertical-align:top\">[compiler, gradle-plugin, intellij-pl<span class=\"structural\">...</span></td><td  style=\"vertical-align:top\">false</td></tr><tr><td  style=\"vertical-align:top\">Exposed</td><td  style=\"vertical-align:top\">5688</td><td  style=\"vertical-align:top\">[dao, kotlin, orm, sql]</td><td  style=\"vertical-align:top\">false</td></tr><tr><td  style=\"vertical-align:top\">kotlin-web-site</td><td  style=\"vertical-align:top\">1074</td><td  style=\"vertical-align:top\">[kotlin]</td><td  style=\"vertical-align:top\">false</td></tr><tr><td  style=\"vertical-align:top\">swot</td><td  style=\"vertical-align:top\">1072</td><td  style=\"vertical-align:top\">[]</td><td  style=\"vertical-align:top\">false</td></tr></tbody></table><p>... showing only top 5 of 17 rows</p></details></td></tr></tbody></table>\n",
       "        </body>\n",
       "        <script>\n",
       "            document.getElementById(\"static_df_536870943\").style.display = \"none\";\n",
       "        </script>\n",
       "        </html>"
      ],
      "application/kotlindataframe+json": "{\"$version\":\"2.1.1\",\"metadata\":{\"columns\":[\"isIntellij\",\"group\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Boolean\"},{\"kind\":\"FrameColumn\"}],\"nrow\":2,\"ncol\":2},\"kotlin_dataframe\":[{\"isIntellij\":true,\"group\":{\"data\":[{\"name\":\"ideavim\",\"starsCount\":6120,\"topics\":[\"ideavim\",\"intellij\",\"intellij-platform\",\"jb-official\",\"kotlin\",\"vim\",\"vim-emulator\"],\"isIntellij\":true},{\"name\":\"intellij-community\",\"starsCount\":12926,\"topics\":[\"code-editor\",\"ide\",\"intellij\",\"intellij-community\",\"intellij-platform\"],\"isIntellij\":true},{\"name\":\"intellij-scala\",\"starsCount\":1066,\"topics\":[\"intellij-idea\",\"intellij-plugin\",\"scala\"],\"isIntellij\":true},{\"name\":\"intellij-plugins\",\"starsCount\":1737,\"topics\":[\"\"],\"isIntellij\":true},{\"name\":\"idea-gitignore\",\"starsCount\":1181,\"topics\":[\"gitignore\",\"ignore-files\",\"intellij\",\"intellij-plugin\",\"java\"],\"isIntellij\":true},{\"name\":\"gradle-intellij-plugin\",\"starsCount\":1058,\"topics\":[\"gradle\",\"gradle-intellij-plugin\",\"gradle-kotlin-dsl\",\"groovy\",\"intellij\",\"intellij-ides\",\"intellij-platform\",\"intellij-plugin\",\"intellij-sdk\",\"jetbrains-plugin\",\"kotlin\",\"plugin-verifier\",\"publishing-dsl\",\"setup-dsl\",\"teamcity\",\"travis-configuration\"],\"isIntellij\":true},{\"name\":\"intellij-platform-plugin-template\",\"starsCount\":1133,\"topics\":[\"intellij\",\"intellij-idea\",\"intellij-idea-plugin\",\"intellij-platform\",\"intellij-plugin\",\"intellij-plugins\",\"jetbrains-plugin\"],\"isIntellij\":true}],\"metadata\":{\"kind\":\"FrameColumn\",\"columns\":[\"name\",\"starsCount\",\"topics\",\"isIntellij\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.collections.List<kotlin.String>\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Boolean\"}],\"ncol\":4,\"nrow\":7}}},{\"isIntellij\":false,\"group\":{\"data\":[{\"name\":\"MPS\",\"starsCount\":1241,\"topics\":[\"domain-specific-language\",\"dsl\"],\"isIntellij\":false},{\"name\":\"kotlin\",\"starsCount\":39402,\"topics\":[\"compiler\",\"gradle-plugin\",\"intellij-plugin\",\"kotlin\",\"kotlin-library\",\"maven-plugin\",\"programming-language\"],\"isIntellij\":false},{\"name\":\"Exposed\",\"starsCount\":5688,\"topics\":[\"dao\",\"kotlin\",\"orm\",\"sql\"],\"isIntellij\":false},{\"name\":\"kotlin-web-site\",\"starsCount\":1074,\"topics\":[\"kotlin\"],\"isIntellij\":false},{\"name\":\"swot\",\"starsCount\":1072,\"topics\":[\"\"],\"isIntellij\":false},{\"name\":\"phpstorm-stubs\",\"starsCount\":1110,\"topics\":[\"\"],\"isIntellij\":false},{\"name\":\"svg-sprite-loader\",\"starsCount\":1815,\"topics\":[\"sprite\",\"svg\",\"svg-sprite\",\"svg-stack\",\"webpack\",\"webpack-loader\",\"webpack-plugin\",\"webpack2\",\"webpack3\"],\"isIntellij\":false},{\"name\":\"resharper-unity\",\"starsCount\":1017,\"topics\":[\"hacktoberfest\",\"jetbrains\",\"plugin\",\"resharper\",\"resharper-plugin\",\"rider\",\"unity\",\"unity-editor\"],\"isIntellij\":false},{\"name\":\"kotlin-native\",\"starsCount\":7101,\"topics\":[\"c\",\"compiler\",\"kotlin\",\"llvm\",\"objective-c\"],\"isIntellij\":false},{\"name\":\"create-react-kotlin-app\",\"starsCount\":2424,\"topics\":[\"create-react-app\",\"jetbrains-ui\",\"kotlin\",\"react\",\"webpack\"],\"isIntellij\":false},{\"name\":\"ring-ui\",\"starsCount\":2836,\"topics\":[\"components\",\"jetbrains-ui\",\"react\"],\"isIntellij\":false},{\"name\":\"kotlinconf-app\",\"starsCount\":2628,\"topics\":[\"\"],\"isIntellij\":false},{\"name\":\"JetBrainsMono\",\"starsCount\":6059,\"topics\":[\"coding-font\",\"font\",\"ligatures\",\"monospaced-font\",\"programming-font\",\"programming-ligatures\"],\"isIntellij\":false},{\"name\":\"skija\",\"starsCount\":2242,\"topics\":[\"2d\",\"graphics\",\"java\",\"skia\"],\"isIntellij\":false},{\"name\":\"projector-docker\",\"starsCount\":1853,\"topics\":[\"awt\",\"docker\",\"swing\"],\"isIntellij\":false},{\"name\":\"projector-server\",\"starsCount\":1025,\"topics\":[\"awt\",\"swing\"],\"isIntellij\":false},{\"name\":\"compose-jb\",\"starsCount\":6805,\"topics\":[\"android\",\"awt\",\"compose\",\"declarative-ui\",\"desktop\",\"gui\",\"javascript\",\"kotlin\",\"multiplatform\",\"reactive\",\"swing\",\"ui\"],\"isIntellij\":false}],\"metadata\":{\"kind\":\"FrameColumn\",\"columns\":[\"name\",\"starsCount\",\"topics\",\"isIntellij\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.collections.List<kotlin.String>\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Boolean\"}],\"ncol\":4,\"nrow\":17}}}]}"
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 11
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "A `GroupBy` can be aggregated — that is, you can compute one or several summary statistics for each group.\n",
    "The result of the aggregation is a `DataFrame` containing the key columns along with new columns holding the computed statistics for a corresponding group.\n",
    "\n",
    "For example, `count()` computes size of group:"
   ]
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-01T13:42:33.868726Z",
     "start_time": "2025-05-01T13:42:33.840038Z"
    }
   },
   "cell_type": "code",
   "source": "groupedByIsIntellij.count()",
   "outputs": [
    {
     "data": {
      "text/html": [
       "            <iframe onload=\"o_resize_iframe_out_17()\" style=\"width:100%;\" class=\"result_container\" id=\"iframe_out_17\" frameBorder=\"0\" srcdoc=\"        &lt;html theme='dark'&gt;\n",
       "        &lt;head&gt;\n",
       "            &lt;style type=&quot;text&sol;css&quot;&gt;\n",
       "                :root {\n",
       "    --background: #fff;\n",
       "    --background-odd: #f5f5f5;\n",
       "    --background-hover: #d9edfd;\n",
       "    --header-text-color: #474747;\n",
       "    --text-color: #848484;\n",
       "    --text-color-dark: #000;\n",
       "    --text-color-medium: #737373;\n",
       "    --text-color-pale: #b3b3b3;\n",
       "    --inner-border-color: #aaa;\n",
       "    --bold-border-color: #000;\n",
       "    --link-color: #296eaa;\n",
       "    --link-color-pale: #296eaa;\n",
       "    --link-hover: #1a466c;\n",
       "}\n",
       "\n",
       ":root[theme=&quot;dark&quot;], :root [data-jp-theme-light=&quot;false&quot;], .dataframe_dark{\n",
       "    --background: #303030;\n",
       "    --background-odd: #3c3c3c;\n",
       "    --background-hover: #464646;\n",
       "    --header-text-color: #dddddd;\n",
       "    --text-color: #b3b3b3;\n",
       "    --text-color-dark: #dddddd;\n",
       "    --text-color-medium: #b2b2b2;\n",
       "    --text-color-pale: #737373;\n",
       "    --inner-border-color: #707070;\n",
       "    --bold-border-color: #777777;\n",
       "    --link-color: #008dc0;\n",
       "    --link-color-pale: #97e1fb;\n",
       "    --link-hover: #00688e;\n",
       "}\n",
       "\n",
       "p.dataframe_description {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe {\n",
       "    font-family: &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif;\n",
       "    font-size: 12px;\n",
       "    background-color: var(--background);\n",
       "    color: var(--text-color-dark);\n",
       "    border: none;\n",
       "    border-collapse: collapse;\n",
       "}\n",
       "\n",
       "table.dataframe th, td {\n",
       "    padding: 6px;\n",
       "    border: 1px solid transparent;\n",
       "    text-align: left;\n",
       "}\n",
       "\n",
       "table.dataframe th {\n",
       "    background-color: var(--background);\n",
       "    color: var(--header-text-color);\n",
       "}\n",
       "\n",
       "table.dataframe td {\n",
       "    vertical-align: top;\n",
       "    white-space: nowrap;\n",
       "}\n",
       "\n",
       "table.dataframe th.bottomBorder {\n",
       "    border-bottom-color: var(--bold-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe tbody &gt; tr:nth-child(odd) {\n",
       "    background: var(--background-odd);\n",
       "}\n",
       "\n",
       "table.dataframe tbody &gt; tr:nth-child(even) {\n",
       "    background: var(--background);\n",
       "}\n",
       "\n",
       "table.dataframe tbody &gt; tr:hover {\n",
       "    background: var(--background-hover);\n",
       "}\n",
       "\n",
       "table.dataframe a {\n",
       "    cursor: pointer;\n",
       "    color: var(--link-color);\n",
       "    text-decoration: none;\n",
       "}\n",
       "\n",
       "table.dataframe tr:hover &gt; td a {\n",
       "    color: var(--link-color-pale);\n",
       "}\n",
       "\n",
       "table.dataframe a:hover {\n",
       "    color: var(--link-hover);\n",
       "    text-decoration: underline;\n",
       "}\n",
       "\n",
       "table.dataframe img {\n",
       "    max-width: fit-content;\n",
       "}\n",
       "\n",
       "table.dataframe th.complex {\n",
       "    background-color: var(--background);\n",
       "    border: 1px solid var(--background);\n",
       "}\n",
       "\n",
       "table.dataframe .leftBorder {\n",
       "    border-left-color: var(--inner-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe .rightBorder {\n",
       "    border-right-color: var(--inner-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe .rightAlign {\n",
       "    text-align: right;\n",
       "}\n",
       "\n",
       "table.dataframe .expanderSvg {\n",
       "    width: 8px;\n",
       "    height: 8px;\n",
       "    margin-right: 3px;\n",
       "}\n",
       "\n",
       "table.dataframe .expander {\n",
       "    display: flex;\n",
       "    align-items: center;\n",
       "}\n",
       "\n",
       "&sol;* formatting *&sol;\n",
       "\n",
       "table.dataframe .null {\n",
       "    color: var(--text-color-pale);\n",
       "}\n",
       "\n",
       "table.dataframe .structural {\n",
       "    color: var(--text-color-medium);\n",
       "    font-weight: bold;\n",
       "}\n",
       "\n",
       "table.dataframe .dataFrameCaption {\n",
       "    font-weight: bold;\n",
       "}\n",
       "\n",
       "table.dataframe .numbers {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe td:hover .formatted .structural, .null {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe tr:hover .formatted .structural, .null {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "\n",
       ":root {\n",
       "    --scroll-bg: #f5f5f5;\n",
       "    --scroll-fg: #b3b3b3;\n",
       "}\n",
       ":root[theme=&quot;dark&quot;], :root [data-jp-theme-light=&quot;false&quot;]{\n",
       "    --scroll-bg: #3c3c3c;\n",
       "    --scroll-fg: #97e1fb;\n",
       "}\n",
       "body {\n",
       "    scrollbar-color: var(--scroll-fg) var(--scroll-bg);\n",
       "}\n",
       "body::-webkit-scrollbar {\n",
       "    width: 10px; &sol;* Mostly for vertical scrollbars *&sol;\n",
       "    height: 10px; &sol;* Mostly for horizontal scrollbars *&sol;\n",
       "}\n",
       "body::-webkit-scrollbar-thumb {\n",
       "    background-color: var(--scroll-fg);\n",
       "}\n",
       "body::-webkit-scrollbar-track {\n",
       "    background-color: var(--scroll-bg);\n",
       "}\n",
       "            &lt;&sol;style&gt;\n",
       "        &lt;&sol;head&gt;\n",
       "        &lt;body&gt;\n",
       "            &lt;table class=&quot;dataframe&quot; id=&quot;df_536870952&quot;&gt;&lt;&sol;table&gt;\n",
       "\n",
       "&lt;p class=&quot;dataframe_description&quot;&gt;DataFrame: rowsCount = 2, columnsCount = 2&lt;&sol;p&gt;\n",
       "\n",
       "        &lt;&sol;body&gt;\n",
       "        &lt;script&gt;\n",
       "            (function () {\n",
       "    window.DataFrame = window.DataFrame || new (function () {\n",
       "        this.addTable = function (df) {\n",
       "            let cols = df.cols;\n",
       "            for (let i = 0; i &lt; cols.length; i++) {\n",
       "                for (let c of cols[i].children) {\n",
       "                    cols[c].parent = i;\n",
       "                }\n",
       "            }\n",
       "            df.nrow = 0\n",
       "            for (let i = 0; i &lt; df.cols.length; i++) {\n",
       "                if (df.cols[i].values.length &gt; df.nrow) df.nrow = df.cols[i].values.length\n",
       "            }\n",
       "            if (df.id === df.rootId) {\n",
       "                df.expandedFrames = new Set()\n",
       "                df.childFrames = {}\n",
       "                const table = this.getTableElement(df.id)\n",
       "                table.df = df\n",
       "                for (let i = 0; i &lt; df.cols.length; i++) {\n",
       "                    let col = df.cols[i]\n",
       "                    if (col.parent === undefined &amp;&amp; col.children.length &gt; 0) col.expanded = true\n",
       "                }\n",
       "            } else {\n",
       "                const rootDf = this.getTableData(df.rootId)\n",
       "                rootDf.childFrames[df.id] = df\n",
       "            }\n",
       "        }\n",
       "\n",
       "        this.computeRenderData = function (df) {\n",
       "            let result = []\n",
       "            let pos = 0\n",
       "            for (let col = 0; col &lt; df.cols.length; col++) {\n",
       "                if (df.cols[col].parent === undefined)\n",
       "                    pos += this.computeRenderDataRec(df.cols, col, pos, 0, result, false, false)\n",
       "            }\n",
       "            for (let i = 0; i &lt; result.length; i++) {\n",
       "                let row = result[i]\n",
       "                for (let j = 0; j &lt; row.length; j++) {\n",
       "                    let cell = row[j]\n",
       "                    if (j === 0)\n",
       "                        cell.leftBd = false\n",
       "                    if (j &lt; row.length - 1) {\n",
       "                        let nextData = row[j + 1]\n",
       "                        if (nextData.leftBd) cell.rightBd = true\n",
       "                        else if (cell.rightBd) nextData.leftBd = true\n",
       "                    } else cell.rightBd = false\n",
       "                }\n",
       "            }\n",
       "            return result\n",
       "        }\n",
       "\n",
       "        this.computeRenderDataRec = function (cols, colId, pos, depth, result, leftBorder, rightBorder) {\n",
       "            if (result.length === depth) {\n",
       "                const array = [];\n",
       "                if (pos &gt; 0) {\n",
       "                    let j = 0\n",
       "                    for (let i = 0; j &lt; pos; i++) {\n",
       "                        let c = result[depth - 1][i]\n",
       "                        j += c.span\n",
       "                        let copy = Object.assign({empty: true}, c)\n",
       "                        array.push(copy)\n",
       "                    }\n",
       "                }\n",
       "                result.push(array)\n",
       "            }\n",
       "            const col = cols[colId];\n",
       "            let size = 0;\n",
       "            if (col.expanded) {\n",
       "                let childPos = pos\n",
       "                for (let i = 0; i &lt; col.children.length; i++) {\n",
       "                    let child = col.children[i]\n",
       "                    let childLeft = i === 0 &amp;&amp; (col.children.length &gt; 1 || leftBorder)\n",
       "                    let childRight = i === col.children.length - 1 &amp;&amp; (col.children.length &gt; 1 || rightBorder)\n",
       "                    let childSize = this.computeRenderDataRec(cols, child, childPos, depth + 1, result, childLeft, childRight)\n",
       "                    childPos += childSize\n",
       "                    size += childSize\n",
       "                }\n",
       "            } else {\n",
       "                for (let i = depth + 1; i &lt; result.length; i++)\n",
       "                    result[i].push({id: colId, span: 1, leftBd: leftBorder, rightBd: rightBorder, empty: true})\n",
       "                size = 1\n",
       "            }\n",
       "            let left = leftBorder\n",
       "            let right = rightBorder\n",
       "            if (size &gt; 1) {\n",
       "                left = true\n",
       "                right = true\n",
       "            }\n",
       "            result[depth].push({id: colId, span: size, leftBd: left, rightBd: right})\n",
       "            return size\n",
       "        }\n",
       "\n",
       "        this.getTableElement = function (id) {\n",
       "            return document.getElementById(&quot;df_&quot; + id)\n",
       "        }\n",
       "\n",
       "        this.getTableData = function (id) {\n",
       "            return this.getTableElement(id).df\n",
       "        }\n",
       "\n",
       "        this.createExpander = function (isExpanded) {\n",
       "            const svgNs = &quot;http:&sol;&sol;www.w3.org&sol;2000&sol;svg&quot;\n",
       "            let svg = document.createElementNS(svgNs, &quot;svg&quot;)\n",
       "            svg.classList.add(&quot;expanderSvg&quot;)\n",
       "            let path = document.createElementNS(svgNs, &quot;path&quot;)\n",
       "            if (isExpanded) {\n",
       "                svg.setAttribute(&quot;viewBox&quot;, &quot;0 -2 8 8&quot;)\n",
       "                path.setAttribute(&quot;d&quot;, &quot;M1 0 l-1 1 4 4 4 -4 -1 -1 -3 3Z&quot;)\n",
       "            } else {\n",
       "                svg.setAttribute(&quot;viewBox&quot;, &quot;-2 0 8 8&quot;)\n",
       "                path.setAttribute(&quot;d&quot;, &quot;M1 0 l-1 1 3 3 -3 3 1 1 4 -4Z&quot;)\n",
       "            }\n",
       "            path.setAttribute(&quot;fill&quot;, &quot;currentColor&quot;)\n",
       "            svg.appendChild(path)\n",
       "            return svg\n",
       "        }\n",
       "\n",
       "        this.renderTable = function (id) {\n",
       "\n",
       "            let table = this.getTableElement(id)\n",
       "\n",
       "            if (table === null) return\n",
       "\n",
       "            table.innerHTML = &quot;&quot;\n",
       "\n",
       "            let df = table.df\n",
       "            let rootDf = df.rootId === df.id ? df : this.getTableData(df.rootId)\n",
       "\n",
       "            &sol;&sol; header\n",
       "            let header = document.createElement(&quot;thead&quot;)\n",
       "            table.appendChild(header)\n",
       "\n",
       "            let renderData = this.computeRenderData(df)\n",
       "            for (let j = 0; j &lt; renderData.length; j++) {\n",
       "                let rowData = renderData[j]\n",
       "                let tr = document.createElement(&quot;tr&quot;);\n",
       "                let isLastRow = j === renderData.length - 1\n",
       "                header.appendChild(tr);\n",
       "                for (let i = 0; i &lt; rowData.length; i++) {\n",
       "                    let cell = rowData[i]\n",
       "                    let th = document.createElement(&quot;th&quot;);\n",
       "                    th.setAttribute(&quot;colspan&quot;, cell.span)\n",
       "                    let colId = cell.id\n",
       "                    let col = df.cols[colId];\n",
       "                    if (!cell.empty) {\n",
       "                        if (col.children.length === 0) {\n",
       "                            th.innerHTML = col.name\n",
       "                        } else {\n",
       "                            let link = document.createElement(&quot;a&quot;)\n",
       "                            link.className = &quot;expander&quot;\n",
       "                            let that = this\n",
       "                            link.onclick = function () {\n",
       "                                col.expanded = !col.expanded\n",
       "                                that.renderTable(id)\n",
       "                            }\n",
       "                            link.appendChild(this.createExpander(col.expanded))\n",
       "                            link.innerHTML += col.name\n",
       "                            th.appendChild(link)\n",
       "                        }\n",
       "                    }\n",
       "                    let classes = (cell.leftBd ? &quot; leftBorder&quot; : &quot;&quot;) + (cell.rightBd ? &quot; rightBorder&quot; : &quot;&quot;)\n",
       "                    if (col.rightAlign)\n",
       "                        classes += &quot; rightAlign&quot;\n",
       "                    if (isLastRow)\n",
       "                        classes += &quot; bottomBorder&quot;\n",
       "                    if (classes.length &gt; 0)\n",
       "                        th.setAttribute(&quot;class&quot;, classes)\n",
       "                    tr.appendChild(th)\n",
       "                }\n",
       "            }\n",
       "\n",
       "            &sol;&sol; body\n",
       "            let body = document.createElement(&quot;tbody&quot;)\n",
       "            table.appendChild(body)\n",
       "\n",
       "            let columns = renderData.pop()\n",
       "            for (let row = 0; row &lt; df.nrow; row++) {\n",
       "                let tr = document.createElement(&quot;tr&quot;);\n",
       "                body.appendChild(tr)\n",
       "                for (let i = 0; i &lt; columns.length; i++) {\n",
       "                    let cell = columns[i]\n",
       "                    let td = document.createElement(&quot;td&quot;);\n",
       "                    let colId = cell.id\n",
       "                    let col = df.cols[colId]\n",
       "                    let classes = (cell.leftBd ? &quot; leftBorder&quot; : &quot;&quot;) + (cell.rightBd ? &quot; rightBorder&quot; : &quot;&quot;)\n",
       "                    if (col.rightAlign)\n",
       "                        classes += &quot; rightAlign&quot;\n",
       "                    if (classes.length &gt; 0)\n",
       "                        td.setAttribute(&quot;class&quot;, classes)\n",
       "                    tr.appendChild(td)\n",
       "                    let value = col.values[row]\n",
       "                    if (value.frameId !== undefined) {\n",
       "                        let frameId = value.frameId\n",
       "                        let expanded = rootDf.expandedFrames.has(frameId)\n",
       "                        let link = document.createElement(&quot;a&quot;)\n",
       "                        link.className = &quot;expander&quot;\n",
       "                        let that = this\n",
       "                        link.onclick = function () {\n",
       "                            if (rootDf.expandedFrames.has(frameId))\n",
       "                                rootDf.expandedFrames.delete(frameId)\n",
       "                            else rootDf.expandedFrames.add(frameId)\n",
       "                            that.renderTable(id)\n",
       "                        }\n",
       "                        link.appendChild(this.createExpander(expanded))\n",
       "                        link.innerHTML += value.value\n",
       "                        if (expanded) {\n",
       "                            td.appendChild(link)\n",
       "                            td.appendChild(document.createElement(&quot;p&quot;))\n",
       "                            const childTable = document.createElement(&quot;table&quot;)\n",
       "                            childTable.className = &quot;dataframe&quot;\n",
       "                            childTable.id = &quot;df_&quot; + frameId\n",
       "                            let childDf = rootDf.childFrames[frameId]\n",
       "                            childTable.df = childDf\n",
       "                            td.appendChild(childTable)\n",
       "                            this.renderTable(frameId)\n",
       "                            if (childDf.nrow !== childDf.totalRows) {\n",
       "                                const footer = document.createElement(&quot;p&quot;)\n",
       "                                footer.innerText = `... showing only top ${childDf.nrow} of ${childDf.totalRows} rows`\n",
       "                                td.appendChild(footer)\n",
       "                            }\n",
       "                        } else {\n",
       "                            td.appendChild(link)\n",
       "                        }\n",
       "                    } else if (value.style !== undefined) {\n",
       "                        td.innerHTML = value.value\n",
       "                        td.setAttribute(&quot;style&quot;, value.style)\n",
       "                    } else td.innerHTML = value\n",
       "                    this.nodeScriptReplace(td)\n",
       "                }\n",
       "            }\n",
       "        }\n",
       "\n",
       "        this.nodeScriptReplace = function (node) {\n",
       "            if (this.nodeScriptIs(node) === true) {\n",
       "                node.parentNode.replaceChild(this.nodeScriptClone(node), node);\n",
       "            } else {\n",
       "                let i = -1, children = node.childNodes;\n",
       "                while (++i &lt; children.length) {\n",
       "                    this.nodeScriptReplace(children[i]);\n",
       "                }\n",
       "            }\n",
       "\n",
       "            return node;\n",
       "        }\n",
       "\n",
       "        this.nodeScriptClone = function (node) {\n",
       "            let script = document.createElement(&quot;script&quot;);\n",
       "            script.text = node.innerHTML;\n",
       "\n",
       "            let i = -1, attrs = node.attributes, attr;\n",
       "            while (++i &lt; attrs.length) {\n",
       "                script.setAttribute((attr = attrs[i]).name, attr.value);\n",
       "            }\n",
       "            return script;\n",
       "        }\n",
       "\n",
       "        this.nodeScriptIs = function (node) {\n",
       "            return node.tagName === 'SCRIPT';\n",
       "        }\n",
       "    })()\n",
       "\n",
       "    window.call_DataFrame = function (f) {\n",
       "        return f();\n",
       "    };\n",
       "\n",
       "    let funQueue = window[&quot;kotlinQueues&quot;] &amp;&amp; window[&quot;kotlinQueues&quot;][&quot;DataFrame&quot;];\n",
       "    if (funQueue) {\n",
       "        funQueue.forEach(function (f) {\n",
       "            f();\n",
       "        });\n",
       "        funQueue = [];\n",
       "    }\n",
       "})()\n",
       "\n",
       "&sol;*&lt;!--*&sol;\n",
       "call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: &quot;&lt;span title=&bsol;&quot;isIntellij: Boolean&bsol;&quot;&gt;isIntellij&lt;&sol;span&gt;&quot;, children: [], rightAlign: false, values: [&quot;true&quot;,&quot;false&quot;] }, \n",
       "{ name: &quot;&lt;span title=&bsol;&quot;count: Int&bsol;&quot;&gt;count&lt;&sol;span&gt;&quot;, children: [], rightAlign: true, values: [&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;7&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;17&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;] }, \n",
       "], id: 536870952, rootId: 536870952, totalRows: 2 } ) });\n",
       "&sol;*--&gt;*&sol;\n",
       "\n",
       "call_DataFrame(function() { DataFrame.renderTable(536870952) });\n",
       "\n",
       "\n",
       "        &lt;&sol;script&gt;\n",
       "        &lt;&sol;html&gt;\"></iframe>\n",
       "            <script>\n",
       "                function o_resize_iframe_out_17() {\n",
       "                    let elem = document.getElementById(\"iframe_out_17\");\n",
       "                    resize_iframe_out_17(elem);\n",
       "                    setInterval(resize_iframe_out_17, 5000, elem);\n",
       "                }\n",
       "                function resize_iframe_out_17(el) {\n",
       "                    let h = el.contentWindow.document.body.scrollHeight;\n",
       "                    el.height = h === 0 ? 0 : h + 41;\n",
       "                }\n",
       "            </script>        <html theme='dark'>\n",
       "        <head>\n",
       "            <style type=\"text/css\">\n",
       "                :root {\n",
       "    --background: #fff;\n",
       "    --background-odd: #f5f5f5;\n",
       "    --background-hover: #d9edfd;\n",
       "    --header-text-color: #474747;\n",
       "    --text-color: #848484;\n",
       "    --text-color-dark: #000;\n",
       "    --text-color-medium: #737373;\n",
       "    --text-color-pale: #b3b3b3;\n",
       "    --inner-border-color: #aaa;\n",
       "    --bold-border-color: #000;\n",
       "    --link-color: #296eaa;\n",
       "    --link-color-pale: #296eaa;\n",
       "    --link-hover: #1a466c;\n",
       "}\n",
       "\n",
       ":root[theme=\"dark\"], :root [data-jp-theme-light=\"false\"], .dataframe_dark{\n",
       "    --background: #303030;\n",
       "    --background-odd: #3c3c3c;\n",
       "    --background-hover: #464646;\n",
       "    --header-text-color: #dddddd;\n",
       "    --text-color: #b3b3b3;\n",
       "    --text-color-dark: #dddddd;\n",
       "    --text-color-medium: #b2b2b2;\n",
       "    --text-color-pale: #737373;\n",
       "    --inner-border-color: #707070;\n",
       "    --bold-border-color: #777777;\n",
       "    --link-color: #008dc0;\n",
       "    --link-color-pale: #97e1fb;\n",
       "    --link-hover: #00688e;\n",
       "}\n",
       "\n",
       "p.dataframe_description {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe {\n",
       "    font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n",
       "    font-size: 12px;\n",
       "    background-color: var(--background);\n",
       "    color: var(--text-color-dark);\n",
       "    border: none;\n",
       "    border-collapse: collapse;\n",
       "}\n",
       "\n",
       "table.dataframe th, td {\n",
       "    padding: 6px;\n",
       "    border: 1px solid transparent;\n",
       "    text-align: left;\n",
       "}\n",
       "\n",
       "table.dataframe th {\n",
       "    background-color: var(--background);\n",
       "    color: var(--header-text-color);\n",
       "}\n",
       "\n",
       "table.dataframe td {\n",
       "    vertical-align: top;\n",
       "    white-space: nowrap;\n",
       "}\n",
       "\n",
       "table.dataframe th.bottomBorder {\n",
       "    border-bottom-color: var(--bold-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe tbody > tr:nth-child(odd) {\n",
       "    background: var(--background-odd);\n",
       "}\n",
       "\n",
       "table.dataframe tbody > tr:nth-child(even) {\n",
       "    background: var(--background);\n",
       "}\n",
       "\n",
       "table.dataframe tbody > tr:hover {\n",
       "    background: var(--background-hover);\n",
       "}\n",
       "\n",
       "table.dataframe a {\n",
       "    cursor: pointer;\n",
       "    color: var(--link-color);\n",
       "    text-decoration: none;\n",
       "}\n",
       "\n",
       "table.dataframe tr:hover > td a {\n",
       "    color: var(--link-color-pale);\n",
       "}\n",
       "\n",
       "table.dataframe a:hover {\n",
       "    color: var(--link-hover);\n",
       "    text-decoration: underline;\n",
       "}\n",
       "\n",
       "table.dataframe img {\n",
       "    max-width: fit-content;\n",
       "}\n",
       "\n",
       "table.dataframe th.complex {\n",
       "    background-color: var(--background);\n",
       "    border: 1px solid var(--background);\n",
       "}\n",
       "\n",
       "table.dataframe .leftBorder {\n",
       "    border-left-color: var(--inner-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe .rightBorder {\n",
       "    border-right-color: var(--inner-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe .rightAlign {\n",
       "    text-align: right;\n",
       "}\n",
       "\n",
       "table.dataframe .expanderSvg {\n",
       "    width: 8px;\n",
       "    height: 8px;\n",
       "    margin-right: 3px;\n",
       "}\n",
       "\n",
       "table.dataframe .expander {\n",
       "    display: flex;\n",
       "    align-items: center;\n",
       "}\n",
       "\n",
       "/* formatting */\n",
       "\n",
       "table.dataframe .null {\n",
       "    color: var(--text-color-pale);\n",
       "}\n",
       "\n",
       "table.dataframe .structural {\n",
       "    color: var(--text-color-medium);\n",
       "    font-weight: bold;\n",
       "}\n",
       "\n",
       "table.dataframe .dataFrameCaption {\n",
       "    font-weight: bold;\n",
       "}\n",
       "\n",
       "table.dataframe .numbers {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe td:hover .formatted .structural, .null {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe tr:hover .formatted .structural, .null {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "\n",
       "            </style>\n",
       "        </head>\n",
       "        <body>\n",
       "            <table class=\"dataframe\" id=\"static_df_536870953\"><thead><tr><th class=\"bottomBorder\" style=\"text-align:left\">isIntellij</th><th class=\"bottomBorder\" style=\"text-align:left\">count</th></tr></thead><tbody><tr><td  style=\"vertical-align:top\">true</td><td  style=\"vertical-align:top\">7</td></tr><tr><td  style=\"vertical-align:top\">false</td><td  style=\"vertical-align:top\">17</td></tr></tbody></table>\n",
       "        </body>\n",
       "        <script>\n",
       "            document.getElementById(\"static_df_536870953\").style.display = \"none\";\n",
       "        </script>\n",
       "        </html>"
      ],
      "application/kotlindataframe+json": "{\"$version\":\"2.1.1\",\"metadata\":{\"columns\":[\"isIntellij\",\"count\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Boolean\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"}],\"nrow\":2,\"ncol\":2},\"kotlin_dataframe\":[{\"isIntellij\":true,\"count\":7},{\"isIntellij\":false,\"count\":17}]}"
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 12
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "Compute several statistics with `.aggregate { }` that provides an expression for aggregating:"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-01T13:42:33.937900Z",
     "start_time": "2025-05-01T13:42:33.881232Z"
    }
   },
   "cell_type": "code",
   "source": [
    "groupedByIsIntellij.aggregate {\n",
    "    // Compute sum and max of \"starsCount\" within each group into \"sumStars\" and \"maxStars\" columns\n",
    "    sumOf { starsCount } into \"sumStars\"\n",
    "    maxOf { starsCount } into \"maxStars\"\n",
    "}"
   ],
   "outputs": [
    {
     "data": {
      "text/html": [
       "            <iframe onload=\"o_resize_iframe_out_18()\" style=\"width:100%;\" class=\"result_container\" id=\"iframe_out_18\" frameBorder=\"0\" srcdoc=\"        &lt;html theme='dark'&gt;\n",
       "        &lt;head&gt;\n",
       "            &lt;style type=&quot;text&sol;css&quot;&gt;\n",
       "                :root {\n",
       "    --background: #fff;\n",
       "    --background-odd: #f5f5f5;\n",
       "    --background-hover: #d9edfd;\n",
       "    --header-text-color: #474747;\n",
       "    --text-color: #848484;\n",
       "    --text-color-dark: #000;\n",
       "    --text-color-medium: #737373;\n",
       "    --text-color-pale: #b3b3b3;\n",
       "    --inner-border-color: #aaa;\n",
       "    --bold-border-color: #000;\n",
       "    --link-color: #296eaa;\n",
       "    --link-color-pale: #296eaa;\n",
       "    --link-hover: #1a466c;\n",
       "}\n",
       "\n",
       ":root[theme=&quot;dark&quot;], :root [data-jp-theme-light=&quot;false&quot;], .dataframe_dark{\n",
       "    --background: #303030;\n",
       "    --background-odd: #3c3c3c;\n",
       "    --background-hover: #464646;\n",
       "    --header-text-color: #dddddd;\n",
       "    --text-color: #b3b3b3;\n",
       "    --text-color-dark: #dddddd;\n",
       "    --text-color-medium: #b2b2b2;\n",
       "    --text-color-pale: #737373;\n",
       "    --inner-border-color: #707070;\n",
       "    --bold-border-color: #777777;\n",
       "    --link-color: #008dc0;\n",
       "    --link-color-pale: #97e1fb;\n",
       "    --link-hover: #00688e;\n",
       "}\n",
       "\n",
       "p.dataframe_description {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe {\n",
       "    font-family: &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif;\n",
       "    font-size: 12px;\n",
       "    background-color: var(--background);\n",
       "    color: var(--text-color-dark);\n",
       "    border: none;\n",
       "    border-collapse: collapse;\n",
       "}\n",
       "\n",
       "table.dataframe th, td {\n",
       "    padding: 6px;\n",
       "    border: 1px solid transparent;\n",
       "    text-align: left;\n",
       "}\n",
       "\n",
       "table.dataframe th {\n",
       "    background-color: var(--background);\n",
       "    color: var(--header-text-color);\n",
       "}\n",
       "\n",
       "table.dataframe td {\n",
       "    vertical-align: top;\n",
       "    white-space: nowrap;\n",
       "}\n",
       "\n",
       "table.dataframe th.bottomBorder {\n",
       "    border-bottom-color: var(--bold-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe tbody &gt; tr:nth-child(odd) {\n",
       "    background: var(--background-odd);\n",
       "}\n",
       "\n",
       "table.dataframe tbody &gt; tr:nth-child(even) {\n",
       "    background: var(--background);\n",
       "}\n",
       "\n",
       "table.dataframe tbody &gt; tr:hover {\n",
       "    background: var(--background-hover);\n",
       "}\n",
       "\n",
       "table.dataframe a {\n",
       "    cursor: pointer;\n",
       "    color: var(--link-color);\n",
       "    text-decoration: none;\n",
       "}\n",
       "\n",
       "table.dataframe tr:hover &gt; td a {\n",
       "    color: var(--link-color-pale);\n",
       "}\n",
       "\n",
       "table.dataframe a:hover {\n",
       "    color: var(--link-hover);\n",
       "    text-decoration: underline;\n",
       "}\n",
       "\n",
       "table.dataframe img {\n",
       "    max-width: fit-content;\n",
       "}\n",
       "\n",
       "table.dataframe th.complex {\n",
       "    background-color: var(--background);\n",
       "    border: 1px solid var(--background);\n",
       "}\n",
       "\n",
       "table.dataframe .leftBorder {\n",
       "    border-left-color: var(--inner-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe .rightBorder {\n",
       "    border-right-color: var(--inner-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe .rightAlign {\n",
       "    text-align: right;\n",
       "}\n",
       "\n",
       "table.dataframe .expanderSvg {\n",
       "    width: 8px;\n",
       "    height: 8px;\n",
       "    margin-right: 3px;\n",
       "}\n",
       "\n",
       "table.dataframe .expander {\n",
       "    display: flex;\n",
       "    align-items: center;\n",
       "}\n",
       "\n",
       "&sol;* formatting *&sol;\n",
       "\n",
       "table.dataframe .null {\n",
       "    color: var(--text-color-pale);\n",
       "}\n",
       "\n",
       "table.dataframe .structural {\n",
       "    color: var(--text-color-medium);\n",
       "    font-weight: bold;\n",
       "}\n",
       "\n",
       "table.dataframe .dataFrameCaption {\n",
       "    font-weight: bold;\n",
       "}\n",
       "\n",
       "table.dataframe .numbers {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe td:hover .formatted .structural, .null {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe tr:hover .formatted .structural, .null {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "\n",
       ":root {\n",
       "    --scroll-bg: #f5f5f5;\n",
       "    --scroll-fg: #b3b3b3;\n",
       "}\n",
       ":root[theme=&quot;dark&quot;], :root [data-jp-theme-light=&quot;false&quot;]{\n",
       "    --scroll-bg: #3c3c3c;\n",
       "    --scroll-fg: #97e1fb;\n",
       "}\n",
       "body {\n",
       "    scrollbar-color: var(--scroll-fg) var(--scroll-bg);\n",
       "}\n",
       "body::-webkit-scrollbar {\n",
       "    width: 10px; &sol;* Mostly for vertical scrollbars *&sol;\n",
       "    height: 10px; &sol;* Mostly for horizontal scrollbars *&sol;\n",
       "}\n",
       "body::-webkit-scrollbar-thumb {\n",
       "    background-color: var(--scroll-fg);\n",
       "}\n",
       "body::-webkit-scrollbar-track {\n",
       "    background-color: var(--scroll-bg);\n",
       "}\n",
       "            &lt;&sol;style&gt;\n",
       "        &lt;&sol;head&gt;\n",
       "        &lt;body&gt;\n",
       "            &lt;table class=&quot;dataframe&quot; id=&quot;df_536870954&quot;&gt;&lt;&sol;table&gt;\n",
       "\n",
       "&lt;p class=&quot;dataframe_description&quot;&gt;DataFrame: rowsCount = 2, columnsCount = 3&lt;&sol;p&gt;\n",
       "\n",
       "        &lt;&sol;body&gt;\n",
       "        &lt;script&gt;\n",
       "            (function () {\n",
       "    window.DataFrame = window.DataFrame || new (function () {\n",
       "        this.addTable = function (df) {\n",
       "            let cols = df.cols;\n",
       "            for (let i = 0; i &lt; cols.length; i++) {\n",
       "                for (let c of cols[i].children) {\n",
       "                    cols[c].parent = i;\n",
       "                }\n",
       "            }\n",
       "            df.nrow = 0\n",
       "            for (let i = 0; i &lt; df.cols.length; i++) {\n",
       "                if (df.cols[i].values.length &gt; df.nrow) df.nrow = df.cols[i].values.length\n",
       "            }\n",
       "            if (df.id === df.rootId) {\n",
       "                df.expandedFrames = new Set()\n",
       "                df.childFrames = {}\n",
       "                const table = this.getTableElement(df.id)\n",
       "                table.df = df\n",
       "                for (let i = 0; i &lt; df.cols.length; i++) {\n",
       "                    let col = df.cols[i]\n",
       "                    if (col.parent === undefined &amp;&amp; col.children.length &gt; 0) col.expanded = true\n",
       "                }\n",
       "            } else {\n",
       "                const rootDf = this.getTableData(df.rootId)\n",
       "                rootDf.childFrames[df.id] = df\n",
       "            }\n",
       "        }\n",
       "\n",
       "        this.computeRenderData = function (df) {\n",
       "            let result = []\n",
       "            let pos = 0\n",
       "            for (let col = 0; col &lt; df.cols.length; col++) {\n",
       "                if (df.cols[col].parent === undefined)\n",
       "                    pos += this.computeRenderDataRec(df.cols, col, pos, 0, result, false, false)\n",
       "            }\n",
       "            for (let i = 0; i &lt; result.length; i++) {\n",
       "                let row = result[i]\n",
       "                for (let j = 0; j &lt; row.length; j++) {\n",
       "                    let cell = row[j]\n",
       "                    if (j === 0)\n",
       "                        cell.leftBd = false\n",
       "                    if (j &lt; row.length - 1) {\n",
       "                        let nextData = row[j + 1]\n",
       "                        if (nextData.leftBd) cell.rightBd = true\n",
       "                        else if (cell.rightBd) nextData.leftBd = true\n",
       "                    } else cell.rightBd = false\n",
       "                }\n",
       "            }\n",
       "            return result\n",
       "        }\n",
       "\n",
       "        this.computeRenderDataRec = function (cols, colId, pos, depth, result, leftBorder, rightBorder) {\n",
       "            if (result.length === depth) {\n",
       "                const array = [];\n",
       "                if (pos &gt; 0) {\n",
       "                    let j = 0\n",
       "                    for (let i = 0; j &lt; pos; i++) {\n",
       "                        let c = result[depth - 1][i]\n",
       "                        j += c.span\n",
       "                        let copy = Object.assign({empty: true}, c)\n",
       "                        array.push(copy)\n",
       "                    }\n",
       "                }\n",
       "                result.push(array)\n",
       "            }\n",
       "            const col = cols[colId];\n",
       "            let size = 0;\n",
       "            if (col.expanded) {\n",
       "                let childPos = pos\n",
       "                for (let i = 0; i &lt; col.children.length; i++) {\n",
       "                    let child = col.children[i]\n",
       "                    let childLeft = i === 0 &amp;&amp; (col.children.length &gt; 1 || leftBorder)\n",
       "                    let childRight = i === col.children.length - 1 &amp;&amp; (col.children.length &gt; 1 || rightBorder)\n",
       "                    let childSize = this.computeRenderDataRec(cols, child, childPos, depth + 1, result, childLeft, childRight)\n",
       "                    childPos += childSize\n",
       "                    size += childSize\n",
       "                }\n",
       "            } else {\n",
       "                for (let i = depth + 1; i &lt; result.length; i++)\n",
       "                    result[i].push({id: colId, span: 1, leftBd: leftBorder, rightBd: rightBorder, empty: true})\n",
       "                size = 1\n",
       "            }\n",
       "            let left = leftBorder\n",
       "            let right = rightBorder\n",
       "            if (size &gt; 1) {\n",
       "                left = true\n",
       "                right = true\n",
       "            }\n",
       "            result[depth].push({id: colId, span: size, leftBd: left, rightBd: right})\n",
       "            return size\n",
       "        }\n",
       "\n",
       "        this.getTableElement = function (id) {\n",
       "            return document.getElementById(&quot;df_&quot; + id)\n",
       "        }\n",
       "\n",
       "        this.getTableData = function (id) {\n",
       "            return this.getTableElement(id).df\n",
       "        }\n",
       "\n",
       "        this.createExpander = function (isExpanded) {\n",
       "            const svgNs = &quot;http:&sol;&sol;www.w3.org&sol;2000&sol;svg&quot;\n",
       "            let svg = document.createElementNS(svgNs, &quot;svg&quot;)\n",
       "            svg.classList.add(&quot;expanderSvg&quot;)\n",
       "            let path = document.createElementNS(svgNs, &quot;path&quot;)\n",
       "            if (isExpanded) {\n",
       "                svg.setAttribute(&quot;viewBox&quot;, &quot;0 -2 8 8&quot;)\n",
       "                path.setAttribute(&quot;d&quot;, &quot;M1 0 l-1 1 4 4 4 -4 -1 -1 -3 3Z&quot;)\n",
       "            } else {\n",
       "                svg.setAttribute(&quot;viewBox&quot;, &quot;-2 0 8 8&quot;)\n",
       "                path.setAttribute(&quot;d&quot;, &quot;M1 0 l-1 1 3 3 -3 3 1 1 4 -4Z&quot;)\n",
       "            }\n",
       "            path.setAttribute(&quot;fill&quot;, &quot;currentColor&quot;)\n",
       "            svg.appendChild(path)\n",
       "            return svg\n",
       "        }\n",
       "\n",
       "        this.renderTable = function (id) {\n",
       "\n",
       "            let table = this.getTableElement(id)\n",
       "\n",
       "            if (table === null) return\n",
       "\n",
       "            table.innerHTML = &quot;&quot;\n",
       "\n",
       "            let df = table.df\n",
       "            let rootDf = df.rootId === df.id ? df : this.getTableData(df.rootId)\n",
       "\n",
       "            &sol;&sol; header\n",
       "            let header = document.createElement(&quot;thead&quot;)\n",
       "            table.appendChild(header)\n",
       "\n",
       "            let renderData = this.computeRenderData(df)\n",
       "            for (let j = 0; j &lt; renderData.length; j++) {\n",
       "                let rowData = renderData[j]\n",
       "                let tr = document.createElement(&quot;tr&quot;);\n",
       "                let isLastRow = j === renderData.length - 1\n",
       "                header.appendChild(tr);\n",
       "                for (let i = 0; i &lt; rowData.length; i++) {\n",
       "                    let cell = rowData[i]\n",
       "                    let th = document.createElement(&quot;th&quot;);\n",
       "                    th.setAttribute(&quot;colspan&quot;, cell.span)\n",
       "                    let colId = cell.id\n",
       "                    let col = df.cols[colId];\n",
       "                    if (!cell.empty) {\n",
       "                        if (col.children.length === 0) {\n",
       "                            th.innerHTML = col.name\n",
       "                        } else {\n",
       "                            let link = document.createElement(&quot;a&quot;)\n",
       "                            link.className = &quot;expander&quot;\n",
       "                            let that = this\n",
       "                            link.onclick = function () {\n",
       "                                col.expanded = !col.expanded\n",
       "                                that.renderTable(id)\n",
       "                            }\n",
       "                            link.appendChild(this.createExpander(col.expanded))\n",
       "                            link.innerHTML += col.name\n",
       "                            th.appendChild(link)\n",
       "                        }\n",
       "                    }\n",
       "                    let classes = (cell.leftBd ? &quot; leftBorder&quot; : &quot;&quot;) + (cell.rightBd ? &quot; rightBorder&quot; : &quot;&quot;)\n",
       "                    if (col.rightAlign)\n",
       "                        classes += &quot; rightAlign&quot;\n",
       "                    if (isLastRow)\n",
       "                        classes += &quot; bottomBorder&quot;\n",
       "                    if (classes.length &gt; 0)\n",
       "                        th.setAttribute(&quot;class&quot;, classes)\n",
       "                    tr.appendChild(th)\n",
       "                }\n",
       "            }\n",
       "\n",
       "            &sol;&sol; body\n",
       "            let body = document.createElement(&quot;tbody&quot;)\n",
       "            table.appendChild(body)\n",
       "\n",
       "            let columns = renderData.pop()\n",
       "            for (let row = 0; row &lt; df.nrow; row++) {\n",
       "                let tr = document.createElement(&quot;tr&quot;);\n",
       "                body.appendChild(tr)\n",
       "                for (let i = 0; i &lt; columns.length; i++) {\n",
       "                    let cell = columns[i]\n",
       "                    let td = document.createElement(&quot;td&quot;);\n",
       "                    let colId = cell.id\n",
       "                    let col = df.cols[colId]\n",
       "                    let classes = (cell.leftBd ? &quot; leftBorder&quot; : &quot;&quot;) + (cell.rightBd ? &quot; rightBorder&quot; : &quot;&quot;)\n",
       "                    if (col.rightAlign)\n",
       "                        classes += &quot; rightAlign&quot;\n",
       "                    if (classes.length &gt; 0)\n",
       "                        td.setAttribute(&quot;class&quot;, classes)\n",
       "                    tr.appendChild(td)\n",
       "                    let value = col.values[row]\n",
       "                    if (value.frameId !== undefined) {\n",
       "                        let frameId = value.frameId\n",
       "                        let expanded = rootDf.expandedFrames.has(frameId)\n",
       "                        let link = document.createElement(&quot;a&quot;)\n",
       "                        link.className = &quot;expander&quot;\n",
       "                        let that = this\n",
       "                        link.onclick = function () {\n",
       "                            if (rootDf.expandedFrames.has(frameId))\n",
       "                                rootDf.expandedFrames.delete(frameId)\n",
       "                            else rootDf.expandedFrames.add(frameId)\n",
       "                            that.renderTable(id)\n",
       "                        }\n",
       "                        link.appendChild(this.createExpander(expanded))\n",
       "                        link.innerHTML += value.value\n",
       "                        if (expanded) {\n",
       "                            td.appendChild(link)\n",
       "                            td.appendChild(document.createElement(&quot;p&quot;))\n",
       "                            const childTable = document.createElement(&quot;table&quot;)\n",
       "                            childTable.className = &quot;dataframe&quot;\n",
       "                            childTable.id = &quot;df_&quot; + frameId\n",
       "                            let childDf = rootDf.childFrames[frameId]\n",
       "                            childTable.df = childDf\n",
       "                            td.appendChild(childTable)\n",
       "                            this.renderTable(frameId)\n",
       "                            if (childDf.nrow !== childDf.totalRows) {\n",
       "                                const footer = document.createElement(&quot;p&quot;)\n",
       "                                footer.innerText = `... showing only top ${childDf.nrow} of ${childDf.totalRows} rows`\n",
       "                                td.appendChild(footer)\n",
       "                            }\n",
       "                        } else {\n",
       "                            td.appendChild(link)\n",
       "                        }\n",
       "                    } else if (value.style !== undefined) {\n",
       "                        td.innerHTML = value.value\n",
       "                        td.setAttribute(&quot;style&quot;, value.style)\n",
       "                    } else td.innerHTML = value\n",
       "                    this.nodeScriptReplace(td)\n",
       "                }\n",
       "            }\n",
       "        }\n",
       "\n",
       "        this.nodeScriptReplace = function (node) {\n",
       "            if (this.nodeScriptIs(node) === true) {\n",
       "                node.parentNode.replaceChild(this.nodeScriptClone(node), node);\n",
       "            } else {\n",
       "                let i = -1, children = node.childNodes;\n",
       "                while (++i &lt; children.length) {\n",
       "                    this.nodeScriptReplace(children[i]);\n",
       "                }\n",
       "            }\n",
       "\n",
       "            return node;\n",
       "        }\n",
       "\n",
       "        this.nodeScriptClone = function (node) {\n",
       "            let script = document.createElement(&quot;script&quot;);\n",
       "            script.text = node.innerHTML;\n",
       "\n",
       "            let i = -1, attrs = node.attributes, attr;\n",
       "            while (++i &lt; attrs.length) {\n",
       "                script.setAttribute((attr = attrs[i]).name, attr.value);\n",
       "            }\n",
       "            return script;\n",
       "        }\n",
       "\n",
       "        this.nodeScriptIs = function (node) {\n",
       "            return node.tagName === 'SCRIPT';\n",
       "        }\n",
       "    })()\n",
       "\n",
       "    window.call_DataFrame = function (f) {\n",
       "        return f();\n",
       "    };\n",
       "\n",
       "    let funQueue = window[&quot;kotlinQueues&quot;] &amp;&amp; window[&quot;kotlinQueues&quot;][&quot;DataFrame&quot;];\n",
       "    if (funQueue) {\n",
       "        funQueue.forEach(function (f) {\n",
       "            f();\n",
       "        });\n",
       "        funQueue = [];\n",
       "    }\n",
       "})()\n",
       "\n",
       "&sol;*&lt;!--*&sol;\n",
       "call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: &quot;&lt;span title=&bsol;&quot;isIntellij: Boolean&bsol;&quot;&gt;isIntellij&lt;&sol;span&gt;&quot;, children: [], rightAlign: false, values: [&quot;true&quot;,&quot;false&quot;] }, \n",
       "{ name: &quot;&lt;span title=&bsol;&quot;sumStars: Int&bsol;&quot;&gt;sumStars&lt;&sol;span&gt;&quot;, children: [], rightAlign: true, values: [&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;25221&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;85392&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;] }, \n",
       "{ name: &quot;&lt;span title=&bsol;&quot;maxStars: Int&bsol;&quot;&gt;maxStars&lt;&sol;span&gt;&quot;, children: [], rightAlign: true, values: [&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;12926&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;39402&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;] }, \n",
       "], id: 536870954, rootId: 536870954, totalRows: 2 } ) });\n",
       "&sol;*--&gt;*&sol;\n",
       "\n",
       "call_DataFrame(function() { DataFrame.renderTable(536870954) });\n",
       "\n",
       "\n",
       "        &lt;&sol;script&gt;\n",
       "        &lt;&sol;html&gt;\"></iframe>\n",
       "            <script>\n",
       "                function o_resize_iframe_out_18() {\n",
       "                    let elem = document.getElementById(\"iframe_out_18\");\n",
       "                    resize_iframe_out_18(elem);\n",
       "                    setInterval(resize_iframe_out_18, 5000, elem);\n",
       "                }\n",
       "                function resize_iframe_out_18(el) {\n",
       "                    let h = el.contentWindow.document.body.scrollHeight;\n",
       "                    el.height = h === 0 ? 0 : h + 41;\n",
       "                }\n",
       "            </script>        <html theme='dark'>\n",
       "        <head>\n",
       "            <style type=\"text/css\">\n",
       "                :root {\n",
       "    --background: #fff;\n",
       "    --background-odd: #f5f5f5;\n",
       "    --background-hover: #d9edfd;\n",
       "    --header-text-color: #474747;\n",
       "    --text-color: #848484;\n",
       "    --text-color-dark: #000;\n",
       "    --text-color-medium: #737373;\n",
       "    --text-color-pale: #b3b3b3;\n",
       "    --inner-border-color: #aaa;\n",
       "    --bold-border-color: #000;\n",
       "    --link-color: #296eaa;\n",
       "    --link-color-pale: #296eaa;\n",
       "    --link-hover: #1a466c;\n",
       "}\n",
       "\n",
       ":root[theme=\"dark\"], :root [data-jp-theme-light=\"false\"], .dataframe_dark{\n",
       "    --background: #303030;\n",
       "    --background-odd: #3c3c3c;\n",
       "    --background-hover: #464646;\n",
       "    --header-text-color: #dddddd;\n",
       "    --text-color: #b3b3b3;\n",
       "    --text-color-dark: #dddddd;\n",
       "    --text-color-medium: #b2b2b2;\n",
       "    --text-color-pale: #737373;\n",
       "    --inner-border-color: #707070;\n",
       "    --bold-border-color: #777777;\n",
       "    --link-color: #008dc0;\n",
       "    --link-color-pale: #97e1fb;\n",
       "    --link-hover: #00688e;\n",
       "}\n",
       "\n",
       "p.dataframe_description {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe {\n",
       "    font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n",
       "    font-size: 12px;\n",
       "    background-color: var(--background);\n",
       "    color: var(--text-color-dark);\n",
       "    border: none;\n",
       "    border-collapse: collapse;\n",
       "}\n",
       "\n",
       "table.dataframe th, td {\n",
       "    padding: 6px;\n",
       "    border: 1px solid transparent;\n",
       "    text-align: left;\n",
       "}\n",
       "\n",
       "table.dataframe th {\n",
       "    background-color: var(--background);\n",
       "    color: var(--header-text-color);\n",
       "}\n",
       "\n",
       "table.dataframe td {\n",
       "    vertical-align: top;\n",
       "    white-space: nowrap;\n",
       "}\n",
       "\n",
       "table.dataframe th.bottomBorder {\n",
       "    border-bottom-color: var(--bold-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe tbody > tr:nth-child(odd) {\n",
       "    background: var(--background-odd);\n",
       "}\n",
       "\n",
       "table.dataframe tbody > tr:nth-child(even) {\n",
       "    background: var(--background);\n",
       "}\n",
       "\n",
       "table.dataframe tbody > tr:hover {\n",
       "    background: var(--background-hover);\n",
       "}\n",
       "\n",
       "table.dataframe a {\n",
       "    cursor: pointer;\n",
       "    color: var(--link-color);\n",
       "    text-decoration: none;\n",
       "}\n",
       "\n",
       "table.dataframe tr:hover > td a {\n",
       "    color: var(--link-color-pale);\n",
       "}\n",
       "\n",
       "table.dataframe a:hover {\n",
       "    color: var(--link-hover);\n",
       "    text-decoration: underline;\n",
       "}\n",
       "\n",
       "table.dataframe img {\n",
       "    max-width: fit-content;\n",
       "}\n",
       "\n",
       "table.dataframe th.complex {\n",
       "    background-color: var(--background);\n",
       "    border: 1px solid var(--background);\n",
       "}\n",
       "\n",
       "table.dataframe .leftBorder {\n",
       "    border-left-color: var(--inner-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe .rightBorder {\n",
       "    border-right-color: var(--inner-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe .rightAlign {\n",
       "    text-align: right;\n",
       "}\n",
       "\n",
       "table.dataframe .expanderSvg {\n",
       "    width: 8px;\n",
       "    height: 8px;\n",
       "    margin-right: 3px;\n",
       "}\n",
       "\n",
       "table.dataframe .expander {\n",
       "    display: flex;\n",
       "    align-items: center;\n",
       "}\n",
       "\n",
       "/* formatting */\n",
       "\n",
       "table.dataframe .null {\n",
       "    color: var(--text-color-pale);\n",
       "}\n",
       "\n",
       "table.dataframe .structural {\n",
       "    color: var(--text-color-medium);\n",
       "    font-weight: bold;\n",
       "}\n",
       "\n",
       "table.dataframe .dataFrameCaption {\n",
       "    font-weight: bold;\n",
       "}\n",
       "\n",
       "table.dataframe .numbers {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe td:hover .formatted .structural, .null {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe tr:hover .formatted .structural, .null {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "\n",
       "            </style>\n",
       "        </head>\n",
       "        <body>\n",
       "            <table class=\"dataframe\" id=\"static_df_536870955\"><thead><tr><th class=\"bottomBorder\" style=\"text-align:left\">isIntellij</th><th class=\"bottomBorder\" style=\"text-align:left\">sumStars</th><th class=\"bottomBorder\" style=\"text-align:left\">maxStars</th></tr></thead><tbody><tr><td  style=\"vertical-align:top\">true</td><td  style=\"vertical-align:top\">25221</td><td  style=\"vertical-align:top\">12926</td></tr><tr><td  style=\"vertical-align:top\">false</td><td  style=\"vertical-align:top\">85392</td><td  style=\"vertical-align:top\">39402</td></tr></tbody></table>\n",
       "        </body>\n",
       "        <script>\n",
       "            document.getElementById(\"static_df_536870955\").style.display = \"none\";\n",
       "        </script>\n",
       "        </html>"
      ],
      "application/kotlindataframe+json": "{\"$version\":\"2.1.1\",\"metadata\":{\"columns\":[\"isIntellij\",\"sumStars\",\"maxStars\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Boolean\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"}],\"nrow\":2,\"ncol\":3},\"kotlin_dataframe\":[{\"isIntellij\":true,\"sumStars\":25221,\"maxStars\":12926},{\"isIntellij\":false,\"sumStars\":85392,\"maxStars\":39402}]}"
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 13
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "## Sorting Rows"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "`.sort {}`/`.sortByDesc` sortes rows by value in selected columns, returning a DataFrame with sorted rows. `take(n)` returns a new `DataFrame` with the first `n` rows.\n",
    "\n",
    "Combine them to get Top-10 repositories by number of stars:"
   ]
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-01T13:42:34.085822Z",
     "start_time": "2025-05-01T13:42:34.039730Z"
    }
   },
   "cell_type": "code",
   "source": [
    "val dfTop10 = dfWithIsIntellij\n",
    "    // Sort by \"starsCount\" value descending\n",
    "    .sortByDesc { starsCount }\n",
    "    .take(10)\n",
    "dfTop10"
   ],
   "outputs": [
    {
     "data": {
      "text/html": [
       "            <iframe onload=\"o_resize_iframe_out_21()\" style=\"width:100%;\" class=\"result_container\" id=\"iframe_out_21\" frameBorder=\"0\" srcdoc=\"        &lt;html theme='dark'&gt;\n",
       "        &lt;head&gt;\n",
       "            &lt;style type=&quot;text&sol;css&quot;&gt;\n",
       "                :root {\n",
       "    --background: #fff;\n",
       "    --background-odd: #f5f5f5;\n",
       "    --background-hover: #d9edfd;\n",
       "    --header-text-color: #474747;\n",
       "    --text-color: #848484;\n",
       "    --text-color-dark: #000;\n",
       "    --text-color-medium: #737373;\n",
       "    --text-color-pale: #b3b3b3;\n",
       "    --inner-border-color: #aaa;\n",
       "    --bold-border-color: #000;\n",
       "    --link-color: #296eaa;\n",
       "    --link-color-pale: #296eaa;\n",
       "    --link-hover: #1a466c;\n",
       "}\n",
       "\n",
       ":root[theme=&quot;dark&quot;], :root [data-jp-theme-light=&quot;false&quot;], .dataframe_dark{\n",
       "    --background: #303030;\n",
       "    --background-odd: #3c3c3c;\n",
       "    --background-hover: #464646;\n",
       "    --header-text-color: #dddddd;\n",
       "    --text-color: #b3b3b3;\n",
       "    --text-color-dark: #dddddd;\n",
       "    --text-color-medium: #b2b2b2;\n",
       "    --text-color-pale: #737373;\n",
       "    --inner-border-color: #707070;\n",
       "    --bold-border-color: #777777;\n",
       "    --link-color: #008dc0;\n",
       "    --link-color-pale: #97e1fb;\n",
       "    --link-hover: #00688e;\n",
       "}\n",
       "\n",
       "p.dataframe_description {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe {\n",
       "    font-family: &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif;\n",
       "    font-size: 12px;\n",
       "    background-color: var(--background);\n",
       "    color: var(--text-color-dark);\n",
       "    border: none;\n",
       "    border-collapse: collapse;\n",
       "}\n",
       "\n",
       "table.dataframe th, td {\n",
       "    padding: 6px;\n",
       "    border: 1px solid transparent;\n",
       "    text-align: left;\n",
       "}\n",
       "\n",
       "table.dataframe th {\n",
       "    background-color: var(--background);\n",
       "    color: var(--header-text-color);\n",
       "}\n",
       "\n",
       "table.dataframe td {\n",
       "    vertical-align: top;\n",
       "    white-space: nowrap;\n",
       "}\n",
       "\n",
       "table.dataframe th.bottomBorder {\n",
       "    border-bottom-color: var(--bold-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe tbody &gt; tr:nth-child(odd) {\n",
       "    background: var(--background-odd);\n",
       "}\n",
       "\n",
       "table.dataframe tbody &gt; tr:nth-child(even) {\n",
       "    background: var(--background);\n",
       "}\n",
       "\n",
       "table.dataframe tbody &gt; tr:hover {\n",
       "    background: var(--background-hover);\n",
       "}\n",
       "\n",
       "table.dataframe a {\n",
       "    cursor: pointer;\n",
       "    color: var(--link-color);\n",
       "    text-decoration: none;\n",
       "}\n",
       "\n",
       "table.dataframe tr:hover &gt; td a {\n",
       "    color: var(--link-color-pale);\n",
       "}\n",
       "\n",
       "table.dataframe a:hover {\n",
       "    color: var(--link-hover);\n",
       "    text-decoration: underline;\n",
       "}\n",
       "\n",
       "table.dataframe img {\n",
       "    max-width: fit-content;\n",
       "}\n",
       "\n",
       "table.dataframe th.complex {\n",
       "    background-color: var(--background);\n",
       "    border: 1px solid var(--background);\n",
       "}\n",
       "\n",
       "table.dataframe .leftBorder {\n",
       "    border-left-color: var(--inner-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe .rightBorder {\n",
       "    border-right-color: var(--inner-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe .rightAlign {\n",
       "    text-align: right;\n",
       "}\n",
       "\n",
       "table.dataframe .expanderSvg {\n",
       "    width: 8px;\n",
       "    height: 8px;\n",
       "    margin-right: 3px;\n",
       "}\n",
       "\n",
       "table.dataframe .expander {\n",
       "    display: flex;\n",
       "    align-items: center;\n",
       "}\n",
       "\n",
       "&sol;* formatting *&sol;\n",
       "\n",
       "table.dataframe .null {\n",
       "    color: var(--text-color-pale);\n",
       "}\n",
       "\n",
       "table.dataframe .structural {\n",
       "    color: var(--text-color-medium);\n",
       "    font-weight: bold;\n",
       "}\n",
       "\n",
       "table.dataframe .dataFrameCaption {\n",
       "    font-weight: bold;\n",
       "}\n",
       "\n",
       "table.dataframe .numbers {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe td:hover .formatted .structural, .null {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe tr:hover .formatted .structural, .null {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "\n",
       ":root {\n",
       "    --scroll-bg: #f5f5f5;\n",
       "    --scroll-fg: #b3b3b3;\n",
       "}\n",
       ":root[theme=&quot;dark&quot;], :root [data-jp-theme-light=&quot;false&quot;]{\n",
       "    --scroll-bg: #3c3c3c;\n",
       "    --scroll-fg: #97e1fb;\n",
       "}\n",
       "body {\n",
       "    scrollbar-color: var(--scroll-fg) var(--scroll-bg);\n",
       "}\n",
       "body::-webkit-scrollbar {\n",
       "    width: 10px; &sol;* Mostly for vertical scrollbars *&sol;\n",
       "    height: 10px; &sol;* Mostly for horizontal scrollbars *&sol;\n",
       "}\n",
       "body::-webkit-scrollbar-thumb {\n",
       "    background-color: var(--scroll-fg);\n",
       "}\n",
       "body::-webkit-scrollbar-track {\n",
       "    background-color: var(--scroll-bg);\n",
       "}\n",
       "            &lt;&sol;style&gt;\n",
       "        &lt;&sol;head&gt;\n",
       "        &lt;body&gt;\n",
       "            &lt;table class=&quot;dataframe&quot; id=&quot;df_536870960&quot;&gt;&lt;&sol;table&gt;\n",
       "\n",
       "&lt;p class=&quot;dataframe_description&quot;&gt;DataFrame: rowsCount = 10, columnsCount = 4&lt;&sol;p&gt;\n",
       "\n",
       "        &lt;&sol;body&gt;\n",
       "        &lt;script&gt;\n",
       "            (function () {\n",
       "    window.DataFrame = window.DataFrame || new (function () {\n",
       "        this.addTable = function (df) {\n",
       "            let cols = df.cols;\n",
       "            for (let i = 0; i &lt; cols.length; i++) {\n",
       "                for (let c of cols[i].children) {\n",
       "                    cols[c].parent = i;\n",
       "                }\n",
       "            }\n",
       "            df.nrow = 0\n",
       "            for (let i = 0; i &lt; df.cols.length; i++) {\n",
       "                if (df.cols[i].values.length &gt; df.nrow) df.nrow = df.cols[i].values.length\n",
       "            }\n",
       "            if (df.id === df.rootId) {\n",
       "                df.expandedFrames = new Set()\n",
       "                df.childFrames = {}\n",
       "                const table = this.getTableElement(df.id)\n",
       "                table.df = df\n",
       "                for (let i = 0; i &lt; df.cols.length; i++) {\n",
       "                    let col = df.cols[i]\n",
       "                    if (col.parent === undefined &amp;&amp; col.children.length &gt; 0) col.expanded = true\n",
       "                }\n",
       "            } else {\n",
       "                const rootDf = this.getTableData(df.rootId)\n",
       "                rootDf.childFrames[df.id] = df\n",
       "            }\n",
       "        }\n",
       "\n",
       "        this.computeRenderData = function (df) {\n",
       "            let result = []\n",
       "            let pos = 0\n",
       "            for (let col = 0; col &lt; df.cols.length; col++) {\n",
       "                if (df.cols[col].parent === undefined)\n",
       "                    pos += this.computeRenderDataRec(df.cols, col, pos, 0, result, false, false)\n",
       "            }\n",
       "            for (let i = 0; i &lt; result.length; i++) {\n",
       "                let row = result[i]\n",
       "                for (let j = 0; j &lt; row.length; j++) {\n",
       "                    let cell = row[j]\n",
       "                    if (j === 0)\n",
       "                        cell.leftBd = false\n",
       "                    if (j &lt; row.length - 1) {\n",
       "                        let nextData = row[j + 1]\n",
       "                        if (nextData.leftBd) cell.rightBd = true\n",
       "                        else if (cell.rightBd) nextData.leftBd = true\n",
       "                    } else cell.rightBd = false\n",
       "                }\n",
       "            }\n",
       "            return result\n",
       "        }\n",
       "\n",
       "        this.computeRenderDataRec = function (cols, colId, pos, depth, result, leftBorder, rightBorder) {\n",
       "            if (result.length === depth) {\n",
       "                const array = [];\n",
       "                if (pos &gt; 0) {\n",
       "                    let j = 0\n",
       "                    for (let i = 0; j &lt; pos; i++) {\n",
       "                        let c = result[depth - 1][i]\n",
       "                        j += c.span\n",
       "                        let copy = Object.assign({empty: true}, c)\n",
       "                        array.push(copy)\n",
       "                    }\n",
       "                }\n",
       "                result.push(array)\n",
       "            }\n",
       "            const col = cols[colId];\n",
       "            let size = 0;\n",
       "            if (col.expanded) {\n",
       "                let childPos = pos\n",
       "                for (let i = 0; i &lt; col.children.length; i++) {\n",
       "                    let child = col.children[i]\n",
       "                    let childLeft = i === 0 &amp;&amp; (col.children.length &gt; 1 || leftBorder)\n",
       "                    let childRight = i === col.children.length - 1 &amp;&amp; (col.children.length &gt; 1 || rightBorder)\n",
       "                    let childSize = this.computeRenderDataRec(cols, child, childPos, depth + 1, result, childLeft, childRight)\n",
       "                    childPos += childSize\n",
       "                    size += childSize\n",
       "                }\n",
       "            } else {\n",
       "                for (let i = depth + 1; i &lt; result.length; i++)\n",
       "                    result[i].push({id: colId, span: 1, leftBd: leftBorder, rightBd: rightBorder, empty: true})\n",
       "                size = 1\n",
       "            }\n",
       "            let left = leftBorder\n",
       "            let right = rightBorder\n",
       "            if (size &gt; 1) {\n",
       "                left = true\n",
       "                right = true\n",
       "            }\n",
       "            result[depth].push({id: colId, span: size, leftBd: left, rightBd: right})\n",
       "            return size\n",
       "        }\n",
       "\n",
       "        this.getTableElement = function (id) {\n",
       "            return document.getElementById(&quot;df_&quot; + id)\n",
       "        }\n",
       "\n",
       "        this.getTableData = function (id) {\n",
       "            return this.getTableElement(id).df\n",
       "        }\n",
       "\n",
       "        this.createExpander = function (isExpanded) {\n",
       "            const svgNs = &quot;http:&sol;&sol;www.w3.org&sol;2000&sol;svg&quot;\n",
       "            let svg = document.createElementNS(svgNs, &quot;svg&quot;)\n",
       "            svg.classList.add(&quot;expanderSvg&quot;)\n",
       "            let path = document.createElementNS(svgNs, &quot;path&quot;)\n",
       "            if (isExpanded) {\n",
       "                svg.setAttribute(&quot;viewBox&quot;, &quot;0 -2 8 8&quot;)\n",
       "                path.setAttribute(&quot;d&quot;, &quot;M1 0 l-1 1 4 4 4 -4 -1 -1 -3 3Z&quot;)\n",
       "            } else {\n",
       "                svg.setAttribute(&quot;viewBox&quot;, &quot;-2 0 8 8&quot;)\n",
       "                path.setAttribute(&quot;d&quot;, &quot;M1 0 l-1 1 3 3 -3 3 1 1 4 -4Z&quot;)\n",
       "            }\n",
       "            path.setAttribute(&quot;fill&quot;, &quot;currentColor&quot;)\n",
       "            svg.appendChild(path)\n",
       "            return svg\n",
       "        }\n",
       "\n",
       "        this.renderTable = function (id) {\n",
       "\n",
       "            let table = this.getTableElement(id)\n",
       "\n",
       "            if (table === null) return\n",
       "\n",
       "            table.innerHTML = &quot;&quot;\n",
       "\n",
       "            let df = table.df\n",
       "            let rootDf = df.rootId === df.id ? df : this.getTableData(df.rootId)\n",
       "\n",
       "            &sol;&sol; header\n",
       "            let header = document.createElement(&quot;thead&quot;)\n",
       "            table.appendChild(header)\n",
       "\n",
       "            let renderData = this.computeRenderData(df)\n",
       "            for (let j = 0; j &lt; renderData.length; j++) {\n",
       "                let rowData = renderData[j]\n",
       "                let tr = document.createElement(&quot;tr&quot;);\n",
       "                let isLastRow = j === renderData.length - 1\n",
       "                header.appendChild(tr);\n",
       "                for (let i = 0; i &lt; rowData.length; i++) {\n",
       "                    let cell = rowData[i]\n",
       "                    let th = document.createElement(&quot;th&quot;);\n",
       "                    th.setAttribute(&quot;colspan&quot;, cell.span)\n",
       "                    let colId = cell.id\n",
       "                    let col = df.cols[colId];\n",
       "                    if (!cell.empty) {\n",
       "                        if (col.children.length === 0) {\n",
       "                            th.innerHTML = col.name\n",
       "                        } else {\n",
       "                            let link = document.createElement(&quot;a&quot;)\n",
       "                            link.className = &quot;expander&quot;\n",
       "                            let that = this\n",
       "                            link.onclick = function () {\n",
       "                                col.expanded = !col.expanded\n",
       "                                that.renderTable(id)\n",
       "                            }\n",
       "                            link.appendChild(this.createExpander(col.expanded))\n",
       "                            link.innerHTML += col.name\n",
       "                            th.appendChild(link)\n",
       "                        }\n",
       "                    }\n",
       "                    let classes = (cell.leftBd ? &quot; leftBorder&quot; : &quot;&quot;) + (cell.rightBd ? &quot; rightBorder&quot; : &quot;&quot;)\n",
       "                    if (col.rightAlign)\n",
       "                        classes += &quot; rightAlign&quot;\n",
       "                    if (isLastRow)\n",
       "                        classes += &quot; bottomBorder&quot;\n",
       "                    if (classes.length &gt; 0)\n",
       "                        th.setAttribute(&quot;class&quot;, classes)\n",
       "                    tr.appendChild(th)\n",
       "                }\n",
       "            }\n",
       "\n",
       "            &sol;&sol; body\n",
       "            let body = document.createElement(&quot;tbody&quot;)\n",
       "            table.appendChild(body)\n",
       "\n",
       "            let columns = renderData.pop()\n",
       "            for (let row = 0; row &lt; df.nrow; row++) {\n",
       "                let tr = document.createElement(&quot;tr&quot;);\n",
       "                body.appendChild(tr)\n",
       "                for (let i = 0; i &lt; columns.length; i++) {\n",
       "                    let cell = columns[i]\n",
       "                    let td = document.createElement(&quot;td&quot;);\n",
       "                    let colId = cell.id\n",
       "                    let col = df.cols[colId]\n",
       "                    let classes = (cell.leftBd ? &quot; leftBorder&quot; : &quot;&quot;) + (cell.rightBd ? &quot; rightBorder&quot; : &quot;&quot;)\n",
       "                    if (col.rightAlign)\n",
       "                        classes += &quot; rightAlign&quot;\n",
       "                    if (classes.length &gt; 0)\n",
       "                        td.setAttribute(&quot;class&quot;, classes)\n",
       "                    tr.appendChild(td)\n",
       "                    let value = col.values[row]\n",
       "                    if (value.frameId !== undefined) {\n",
       "                        let frameId = value.frameId\n",
       "                        let expanded = rootDf.expandedFrames.has(frameId)\n",
       "                        let link = document.createElement(&quot;a&quot;)\n",
       "                        link.className = &quot;expander&quot;\n",
       "                        let that = this\n",
       "                        link.onclick = function () {\n",
       "                            if (rootDf.expandedFrames.has(frameId))\n",
       "                                rootDf.expandedFrames.delete(frameId)\n",
       "                            else rootDf.expandedFrames.add(frameId)\n",
       "                            that.renderTable(id)\n",
       "                        }\n",
       "                        link.appendChild(this.createExpander(expanded))\n",
       "                        link.innerHTML += value.value\n",
       "                        if (expanded) {\n",
       "                            td.appendChild(link)\n",
       "                            td.appendChild(document.createElement(&quot;p&quot;))\n",
       "                            const childTable = document.createElement(&quot;table&quot;)\n",
       "                            childTable.className = &quot;dataframe&quot;\n",
       "                            childTable.id = &quot;df_&quot; + frameId\n",
       "                            let childDf = rootDf.childFrames[frameId]\n",
       "                            childTable.df = childDf\n",
       "                            td.appendChild(childTable)\n",
       "                            this.renderTable(frameId)\n",
       "                            if (childDf.nrow !== childDf.totalRows) {\n",
       "                                const footer = document.createElement(&quot;p&quot;)\n",
       "                                footer.innerText = `... showing only top ${childDf.nrow} of ${childDf.totalRows} rows`\n",
       "                                td.appendChild(footer)\n",
       "                            }\n",
       "                        } else {\n",
       "                            td.appendChild(link)\n",
       "                        }\n",
       "                    } else if (value.style !== undefined) {\n",
       "                        td.innerHTML = value.value\n",
       "                        td.setAttribute(&quot;style&quot;, value.style)\n",
       "                    } else td.innerHTML = value\n",
       "                    this.nodeScriptReplace(td)\n",
       "                }\n",
       "            }\n",
       "        }\n",
       "\n",
       "        this.nodeScriptReplace = function (node) {\n",
       "            if (this.nodeScriptIs(node) === true) {\n",
       "                node.parentNode.replaceChild(this.nodeScriptClone(node), node);\n",
       "            } else {\n",
       "                let i = -1, children = node.childNodes;\n",
       "                while (++i &lt; children.length) {\n",
       "                    this.nodeScriptReplace(children[i]);\n",
       "                }\n",
       "            }\n",
       "\n",
       "            return node;\n",
       "        }\n",
       "\n",
       "        this.nodeScriptClone = function (node) {\n",
       "            let script = document.createElement(&quot;script&quot;);\n",
       "            script.text = node.innerHTML;\n",
       "\n",
       "            let i = -1, attrs = node.attributes, attr;\n",
       "            while (++i &lt; attrs.length) {\n",
       "                script.setAttribute((attr = attrs[i]).name, attr.value);\n",
       "            }\n",
       "            return script;\n",
       "        }\n",
       "\n",
       "        this.nodeScriptIs = function (node) {\n",
       "            return node.tagName === 'SCRIPT';\n",
       "        }\n",
       "    })()\n",
       "\n",
       "    window.call_DataFrame = function (f) {\n",
       "        return f();\n",
       "    };\n",
       "\n",
       "    let funQueue = window[&quot;kotlinQueues&quot;] &amp;&amp; window[&quot;kotlinQueues&quot;][&quot;DataFrame&quot;];\n",
       "    if (funQueue) {\n",
       "        funQueue.forEach(function (f) {\n",
       "            f();\n",
       "        });\n",
       "        funQueue = [];\n",
       "    }\n",
       "})()\n",
       "\n",
       "&sol;*&lt;!--*&sol;\n",
       "call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: &quot;&lt;span title=&bsol;&quot;name: String&bsol;&quot;&gt;name&lt;&sol;span&gt;&quot;, children: [], rightAlign: false, values: [&quot;kotlin&quot;,&quot;intellij-community&quot;,&quot;kotlin-native&quot;,&quot;compose-jb&quot;,&quot;ideavim&quot;,&quot;JetBrainsMono&quot;,&quot;Exposed&quot;,&quot;ring-ui&quot;,&quot;kotlinconf-app&quot;,&quot;create-react-kotlin-app&quot;] }, \n",
       "{ name: &quot;&lt;span title=&bsol;&quot;starsCount: Int&bsol;&quot;&gt;starsCount&lt;&sol;span&gt;&quot;, children: [], rightAlign: true, values: [&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;39402&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;12926&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;7101&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;6805&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;6120&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;6059&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;5688&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;2836&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;2628&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;numbers&bsol;&quot;&gt;2424&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;] }, \n",
       "{ name: &quot;&lt;span title=&bsol;&quot;topics: List&lt;String&gt;&bsol;&quot;&gt;topics&lt;&sol;span&gt;&quot;, children: [], rightAlign: false, values: [&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;compiler&bsol;ngradle-plugin&bsol;nintellij-plugin&bsol;nkotlin&bsol;nkotlin-library&bsol;nmaven-plugin&bsol;nprogramming-language&bsol;&quot;&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;[&lt;&sol;span&gt;compiler&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;gradle-plugin&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;intel&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;]&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;code-editor&bsol;nide&bsol;nintellij&bsol;nintellij-community&bsol;nintellij-platform&bsol;&quot;&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;[&lt;&sol;span&gt;code-editor&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;ide&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;intellij&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;i&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;i&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;]&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;c&bsol;ncompiler&bsol;nkotlin&bsol;nllvm&bsol;nobjective-c&bsol;&quot;&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;[&lt;&sol;span&gt;c&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;compiler&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;kotlin&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;llvm&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;objective-c&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;]&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;android&bsol;nawt&bsol;ncompose&bsol;ndeclarative-ui&bsol;ndesktop&bsol;ngui&bsol;njavascript&bsol;nkotlin&bsol;nmultiplatform&bsol;nreactive&bsol;nswing&bsol;nui&bsol;&quot;&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;[&lt;&sol;span&gt;android&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;awt&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;compose&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;declara&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;]&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;ideavim&bsol;nintellij&bsol;nintellij-platform&bsol;njb-official&bsol;nkotlin&bsol;nvim&bsol;nvim-emulator&bsol;&quot;&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;[&lt;&sol;span&gt;ideavim&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;intellij&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;intellij-pl&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;]&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;coding-font&bsol;nfont&bsol;nligatures&bsol;nmonospaced-font&bsol;nprogramming-font&bsol;nprogramming-ligatures&bsol;&quot;&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;[&lt;&sol;span&gt;coding-font&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;font&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;ligatures&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;]&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;dao&bsol;nkotlin&bsol;norm&bsol;nsql&bsol;&quot;&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;[&lt;&sol;span&gt;dao&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;kotlin&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;orm&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;sql&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;]&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;components&bsol;njetbrains-ui&bsol;nreact&bsol;&quot;&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;[&lt;&sol;span&gt;components&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;jetbrains-ui&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;react&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;]&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;&bsol;&quot;&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;[&lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;]&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;,&quot;&lt;span class=&bsol;&quot;formatted&bsol;&quot; title=&bsol;&quot;create-react-app&bsol;njetbrains-ui&bsol;nkotlin&bsol;nreact&bsol;nwebpack&bsol;&quot;&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;[&lt;&sol;span&gt;create-react-app&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;jetbrains-ui&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;, &lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;...&lt;&sol;span&gt;&lt;span class=&bsol;&quot;structural&bsol;&quot;&gt;]&lt;&sol;span&gt;&lt;&sol;span&gt;&quot;] }, \n",
       "{ name: &quot;&lt;span title=&bsol;&quot;isIntellij: Boolean&bsol;&quot;&gt;isIntellij&lt;&sol;span&gt;&quot;, children: [], rightAlign: false, values: [&quot;false&quot;,&quot;true&quot;,&quot;false&quot;,&quot;false&quot;,&quot;true&quot;,&quot;false&quot;,&quot;false&quot;,&quot;false&quot;,&quot;false&quot;,&quot;false&quot;] }, \n",
       "], id: 536870960, rootId: 536870960, totalRows: 10 } ) });\n",
       "&sol;*--&gt;*&sol;\n",
       "\n",
       "call_DataFrame(function() { DataFrame.renderTable(536870960) });\n",
       "\n",
       "\n",
       "        &lt;&sol;script&gt;\n",
       "        &lt;&sol;html&gt;\"></iframe>\n",
       "            <script>\n",
       "                function o_resize_iframe_out_21() {\n",
       "                    let elem = document.getElementById(\"iframe_out_21\");\n",
       "                    resize_iframe_out_21(elem);\n",
       "                    setInterval(resize_iframe_out_21, 5000, elem);\n",
       "                }\n",
       "                function resize_iframe_out_21(el) {\n",
       "                    let h = el.contentWindow.document.body.scrollHeight;\n",
       "                    el.height = h === 0 ? 0 : h + 41;\n",
       "                }\n",
       "            </script>        <html theme='dark'>\n",
       "        <head>\n",
       "            <style type=\"text/css\">\n",
       "                :root {\n",
       "    --background: #fff;\n",
       "    --background-odd: #f5f5f5;\n",
       "    --background-hover: #d9edfd;\n",
       "    --header-text-color: #474747;\n",
       "    --text-color: #848484;\n",
       "    --text-color-dark: #000;\n",
       "    --text-color-medium: #737373;\n",
       "    --text-color-pale: #b3b3b3;\n",
       "    --inner-border-color: #aaa;\n",
       "    --bold-border-color: #000;\n",
       "    --link-color: #296eaa;\n",
       "    --link-color-pale: #296eaa;\n",
       "    --link-hover: #1a466c;\n",
       "}\n",
       "\n",
       ":root[theme=\"dark\"], :root [data-jp-theme-light=\"false\"], .dataframe_dark{\n",
       "    --background: #303030;\n",
       "    --background-odd: #3c3c3c;\n",
       "    --background-hover: #464646;\n",
       "    --header-text-color: #dddddd;\n",
       "    --text-color: #b3b3b3;\n",
       "    --text-color-dark: #dddddd;\n",
       "    --text-color-medium: #b2b2b2;\n",
       "    --text-color-pale: #737373;\n",
       "    --inner-border-color: #707070;\n",
       "    --bold-border-color: #777777;\n",
       "    --link-color: #008dc0;\n",
       "    --link-color-pale: #97e1fb;\n",
       "    --link-hover: #00688e;\n",
       "}\n",
       "\n",
       "p.dataframe_description {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe {\n",
       "    font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n",
       "    font-size: 12px;\n",
       "    background-color: var(--background);\n",
       "    color: var(--text-color-dark);\n",
       "    border: none;\n",
       "    border-collapse: collapse;\n",
       "}\n",
       "\n",
       "table.dataframe th, td {\n",
       "    padding: 6px;\n",
       "    border: 1px solid transparent;\n",
       "    text-align: left;\n",
       "}\n",
       "\n",
       "table.dataframe th {\n",
       "    background-color: var(--background);\n",
       "    color: var(--header-text-color);\n",
       "}\n",
       "\n",
       "table.dataframe td {\n",
       "    vertical-align: top;\n",
       "    white-space: nowrap;\n",
       "}\n",
       "\n",
       "table.dataframe th.bottomBorder {\n",
       "    border-bottom-color: var(--bold-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe tbody > tr:nth-child(odd) {\n",
       "    background: var(--background-odd);\n",
       "}\n",
       "\n",
       "table.dataframe tbody > tr:nth-child(even) {\n",
       "    background: var(--background);\n",
       "}\n",
       "\n",
       "table.dataframe tbody > tr:hover {\n",
       "    background: var(--background-hover);\n",
       "}\n",
       "\n",
       "table.dataframe a {\n",
       "    cursor: pointer;\n",
       "    color: var(--link-color);\n",
       "    text-decoration: none;\n",
       "}\n",
       "\n",
       "table.dataframe tr:hover > td a {\n",
       "    color: var(--link-color-pale);\n",
       "}\n",
       "\n",
       "table.dataframe a:hover {\n",
       "    color: var(--link-hover);\n",
       "    text-decoration: underline;\n",
       "}\n",
       "\n",
       "table.dataframe img {\n",
       "    max-width: fit-content;\n",
       "}\n",
       "\n",
       "table.dataframe th.complex {\n",
       "    background-color: var(--background);\n",
       "    border: 1px solid var(--background);\n",
       "}\n",
       "\n",
       "table.dataframe .leftBorder {\n",
       "    border-left-color: var(--inner-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe .rightBorder {\n",
       "    border-right-color: var(--inner-border-color);\n",
       "}\n",
       "\n",
       "table.dataframe .rightAlign {\n",
       "    text-align: right;\n",
       "}\n",
       "\n",
       "table.dataframe .expanderSvg {\n",
       "    width: 8px;\n",
       "    height: 8px;\n",
       "    margin-right: 3px;\n",
       "}\n",
       "\n",
       "table.dataframe .expander {\n",
       "    display: flex;\n",
       "    align-items: center;\n",
       "}\n",
       "\n",
       "/* formatting */\n",
       "\n",
       "table.dataframe .null {\n",
       "    color: var(--text-color-pale);\n",
       "}\n",
       "\n",
       "table.dataframe .structural {\n",
       "    color: var(--text-color-medium);\n",
       "    font-weight: bold;\n",
       "}\n",
       "\n",
       "table.dataframe .dataFrameCaption {\n",
       "    font-weight: bold;\n",
       "}\n",
       "\n",
       "table.dataframe .numbers {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe td:hover .formatted .structural, .null {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "table.dataframe tr:hover .formatted .structural, .null {\n",
       "    color: var(--text-color-dark);\n",
       "}\n",
       "\n",
       "\n",
       "            </style>\n",
       "        </head>\n",
       "        <body>\n",
       "            <table class=\"dataframe\" id=\"static_df_536870961\"><thead><tr><th class=\"bottomBorder\" style=\"text-align:left\">name</th><th class=\"bottomBorder\" style=\"text-align:left\">starsCount</th><th class=\"bottomBorder\" style=\"text-align:left\">topics</th><th class=\"bottomBorder\" style=\"text-align:left\">isIntellij</th></tr></thead><tbody><tr><td  style=\"vertical-align:top\">kotlin</td><td  style=\"vertical-align:top\">39402</td><td  style=\"vertical-align:top\">[compiler, gradle-plugin, intellij-pl<span class=\"structural\">...</span></td><td  style=\"vertical-align:top\">false</td></tr><tr><td  style=\"vertical-align:top\">intellij-community</td><td  style=\"vertical-align:top\">12926</td><td  style=\"vertical-align:top\">[code-editor, ide, intellij, intellij<span class=\"structural\">...</span></td><td  style=\"vertical-align:top\">true</td></tr><tr><td  style=\"vertical-align:top\">kotlin-native</td><td  style=\"vertical-align:top\">7101</td><td  style=\"vertical-align:top\">[c, compiler, kotlin, llvm, objective-c]</td><td  style=\"vertical-align:top\">false</td></tr><tr><td  style=\"vertical-align:top\">compose-jb</td><td  style=\"vertical-align:top\">6805</td><td  style=\"vertical-align:top\">[android, awt, compose, declarative-u<span class=\"structural\">...</span></td><td  style=\"vertical-align:top\">false</td></tr><tr><td  style=\"vertical-align:top\">ideavim</td><td  style=\"vertical-align:top\">6120</td><td  style=\"vertical-align:top\">[ideavim, intellij, intellij-platform<span class=\"structural\">...</span></td><td  style=\"vertical-align:top\">true</td></tr><tr><td  style=\"vertical-align:top\">JetBrainsMono</td><td  style=\"vertical-align:top\">6059</td><td  style=\"vertical-align:top\">[coding-font, font, ligatures, monosp<span class=\"structural\">...</span></td><td  style=\"vertical-align:top\">false</td></tr><tr><td  style=\"vertical-align:top\">Exposed</td><td  style=\"vertical-align:top\">5688</td><td  style=\"vertical-align:top\">[dao, kotlin, orm, sql]</td><td  style=\"vertical-align:top\">false</td></tr><tr><td  style=\"vertical-align:top\">ring-ui</td><td  style=\"vertical-align:top\">2836</td><td  style=\"vertical-align:top\">[components, jetbrains-ui, react]</td><td  style=\"vertical-align:top\">false</td></tr><tr><td  style=\"vertical-align:top\">kotlinconf-app</td><td  style=\"vertical-align:top\">2628</td><td  style=\"vertical-align:top\">[]</td><td  style=\"vertical-align:top\">false</td></tr><tr><td  style=\"vertical-align:top\">create-react-kotlin-app</td><td  style=\"vertical-align:top\">2424</td><td  style=\"vertical-align:top\">[create-react-app, jetbrains-ui, kotl<span class=\"structural\">...</span></td><td  style=\"vertical-align:top\">false</td></tr></tbody></table>\n",
       "        </body>\n",
       "        <script>\n",
       "            document.getElementById(\"static_df_536870961\").style.display = \"none\";\n",
       "        </script>\n",
       "        </html>"
      ],
      "application/kotlindataframe+json": "{\"$version\":\"2.1.1\",\"metadata\":{\"columns\":[\"name\",\"starsCount\",\"topics\",\"isIntellij\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.collections.List<kotlin.String>\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Boolean\"}],\"nrow\":10,\"ncol\":4},\"kotlin_dataframe\":[{\"name\":\"kotlin\",\"starsCount\":39402,\"topics\":[\"compiler\",\"gradle-plugin\",\"intellij-plugin\",\"kotlin\",\"kotlin-library\",\"maven-plugin\",\"programming-language\"],\"isIntellij\":false},{\"name\":\"intellij-community\",\"starsCount\":12926,\"topics\":[\"code-editor\",\"ide\",\"intellij\",\"intellij-community\",\"intellij-platform\"],\"isIntellij\":true},{\"name\":\"kotlin-native\",\"starsCount\":7101,\"topics\":[\"c\",\"compiler\",\"kotlin\",\"llvm\",\"objective-c\"],\"isIntellij\":false},{\"name\":\"compose-jb\",\"starsCount\":6805,\"topics\":[\"android\",\"awt\",\"compose\",\"declarative-ui\",\"desktop\",\"gui\",\"javascript\",\"kotlin\",\"multiplatform\",\"reactive\",\"swing\",\"ui\"],\"isIntellij\":false},{\"name\":\"ideavim\",\"starsCount\":6120,\"topics\":[\"ideavim\",\"intellij\",\"intellij-platform\",\"jb-official\",\"kotlin\",\"vim\",\"vim-emulator\"],\"isIntellij\":true},{\"name\":\"JetBrainsMono\",\"starsCount\":6059,\"topics\":[\"coding-font\",\"font\",\"ligatures\",\"monospaced-font\",\"programming-font\",\"programming-ligatures\"],\"isIntellij\":false},{\"name\":\"Exposed\",\"starsCount\":5688,\"topics\":[\"dao\",\"kotlin\",\"orm\",\"sql\"],\"isIntellij\":false},{\"name\":\"ring-ui\",\"starsCount\":2836,\"topics\":[\"components\",\"jetbrains-ui\",\"react\"],\"isIntellij\":false},{\"name\":\"kotlinconf-app\",\"starsCount\":2628,\"topics\":[\"\"],\"isIntellij\":false},{\"name\":\"create-react-kotlin-app\",\"starsCount\":2424,\"topics\":[\"create-react-app\",\"jetbrains-ui\",\"kotlin\",\"react\",\"webpack\"],\"isIntellij\":false}]}"
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 14
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "## Plotting With Kandy"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "Kandy is a Kotlin plotting library designed to bring Kotlin DataFrame features into chart creation, providing a convenient and typesafe way to build data visualizations.\n",
    "\n",
    "Kandy can be loaded into notebook using `%use kandy`:"
   ]
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-01T13:42:37.589007Z",
     "start_time": "2025-05-01T13:42:34.130284Z"
    }
   },
   "cell_type": "code",
   "source": "%use kandy",
   "outputs": [],
   "execution_count": 15
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "Build a simple bar chart with `.plot { }` extension for DataFrame, that allows to use extension properties inside Kandy plotting DSL (plot will be rendered as an output after cell execution):"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-01T13:42:37.812897Z",
     "start_time": "2025-05-01T13:42:37.592435Z"
    }
   },
   "cell_type": "code",
   "source": [
    "dfTop10.plot {\n",
    "    bars {\n",
    "        x(name)\n",
    "        y(starsCount)\n",
    "    }\n",
    "\n",
    "    layout.title = \"Top 10 JetBrains repositories by stars count\"\n",
    "}"
   ],
   "outputs": [
    {
     "data": {
      "text/html": [
       "            <iframe src='about:blank' style='border:none !important;' width='600' height='400' srcdoc=\"&lt;html lang=&quot;en&quot;>\n",
       "   &lt;head>\n",
       "       &lt;meta charset=&quot;UTF-8&quot;>\n",
       "       &lt;style> html, body { margin: 0; overflow: hidden; } &lt;/style>\n",
       "       &lt;script type=&quot;text/javascript&quot; data-lets-plot-script=&quot;library&quot; src=&quot;https://cdn.jsdelivr.net/gh/JetBrains/lets-plot@v4.5.1/js-package/distr/lets-plot.min.js&quot;>&lt;/script>\n",
       "   &lt;/head>\n",
       "   &lt;body>\n",
       "          &lt;div id=&quot;rDsdBI&quot;>&lt;/div>\n",
       "   &lt;script type=&quot;text/javascript&quot; data-lets-plot-script=&quot;plot&quot;>\n",
       "   \n",
       "   (function() {\n",
       "   // ----------\n",
       "   \n",
       "       var plotSpec={\n",
       "&quot;ggtitle&quot;:{\n",
       "&quot;text&quot;:&quot;Top 10 JetBrains repositories by stars count&quot;\n",
       "},\n",
       "&quot;mapping&quot;:{\n",
       "},\n",
       "&quot;data&quot;:{\n",
       "&quot;starsCount&quot;:[39402.0,12926.0,7101.0,6805.0,6120.0,6059.0,5688.0,2836.0,2628.0,2424.0],\n",
       "&quot;name&quot;:[&quot;kotlin&quot;,&quot;intellij-community&quot;,&quot;kotlin-native&quot;,&quot;compose-jb&quot;,&quot;ideavim&quot;,&quot;JetBrainsMono&quot;,&quot;Exposed&quot;,&quot;ring-ui&quot;,&quot;kotlinconf-app&quot;,&quot;create-react-kotlin-app&quot;]\n",
       "},\n",
       "&quot;kind&quot;:&quot;plot&quot;,\n",
       "&quot;scales&quot;:[{\n",
       "&quot;aesthetic&quot;:&quot;x&quot;,\n",
       "&quot;discrete&quot;:true\n",
       "},{\n",
       "&quot;aesthetic&quot;:&quot;y&quot;,\n",
       "&quot;limits&quot;:[null,null]\n",
       "}],\n",
       "&quot;layers&quot;:[{\n",
       "&quot;mapping&quot;:{\n",
       "&quot;x&quot;:&quot;name&quot;,\n",
       "&quot;y&quot;:&quot;starsCount&quot;\n",
       "},\n",
       "&quot;stat&quot;:&quot;identity&quot;,\n",
       "&quot;sampling&quot;:&quot;none&quot;,\n",
       "&quot;inherit_aes&quot;:false,\n",
       "&quot;position&quot;:&quot;dodge&quot;,\n",
       "&quot;geom&quot;:&quot;bar&quot;,\n",
       "&quot;data&quot;:{\n",
       "}\n",
       "}],\n",
       "&quot;data_meta&quot;:{\n",
       "&quot;series_annotations&quot;:[{\n",
       "&quot;type&quot;:&quot;str&quot;,\n",
       "&quot;column&quot;:&quot;name&quot;\n",
       "},{\n",
       "&quot;type&quot;:&quot;int&quot;,\n",
       "&quot;column&quot;:&quot;starsCount&quot;\n",
       "}]\n",
       "},\n",
       "&quot;spec_id&quot;:&quot;2&quot;\n",
       "};\n",
       "       var containerDiv = document.getElementById(&quot;rDsdBI&quot;);\n",
       "       \n",
       "               var toolbar = null;\n",
       "               var plotContainer = containerDiv;               \n",
       "               \n",
       "       var options = {\n",
       "           sizing: {\n",
       "               width_mode: &quot;fixed&quot;,\n",
       "               height_mode: &quot;fixed&quot;,\n",
       "               width: 600.0,\n",
       "               height: 400.0\n",
       "           }\n",
       "       };\n",
       "       var fig = LetsPlot.buildPlotFromProcessedSpecs(plotSpec, -1, -1, plotContainer, options);\n",
       "       if (toolbar) {\n",
       "         toolbar.bind(fig);\n",
       "       }\n",
       "       \n",
       "   // ----------\n",
       "   })();\n",
       "   \n",
       "   &lt;/script>\n",
       "   &lt;/body>\n",
       "&lt;/html>\"></iframe>            <svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" display=\"block\" class=\"plt-container\" id=5b15c3c0-3030-4983-b838-6f80bcee43b1 width=\"100%\" height=\"100%\" style=\"max-width: 600.0px; max-height: 400.0px;\" viewBox=\"0 0 600.0 400.0\" preserveAspectRatio=\"xMinYMin meet\">\n",
       "  <style type=\"text/css\">\n",
       "  .plt-container {\n",
       "   font-family: Lucida Grande, sans-serif;\n",
       "   user-select: none;\n",
       "   -webkit-user-select: none;\n",
       "   -moz-user-select: none;\n",
       "   -ms-user-select: none;\n",
       "}\n",
       "text {\n",
       "   text-rendering: optimizeLegibility;\n",
       "}\n",
       "#pNoYcNi .plot-title {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: Lucida Grande, sans-serif;\n",
       "font-size: 16.0px;\n",
       "\n",
       "}\n",
       "#pNoYcNi .plot-subtitle {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: Lucida Grande, sans-serif;\n",
       "font-size: 15.0px;\n",
       "\n",
       "}\n",
       "#pNoYcNi .plot-caption {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: Lucida Grande, sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#pNoYcNi .hyperlink-element {\n",
       "fill: #118ed8;\n",
       "font-weight: normal;\n",
       "   font-style: normal;\n",
       "}\n",
       "#pNoYcNi .legend-title {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: Lucida Grande, sans-serif;\n",
       "font-size: 15.0px;\n",
       "\n",
       "}\n",
       "#pNoYcNi .legend-item {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: Lucida Grande, sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#pNoYcNi .axis-title-x {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: Lucida Grande, sans-serif;\n",
       "font-size: 15.0px;\n",
       "\n",
       "}\n",
       "#pNoYcNi .axis-text-x {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: Lucida Grande, sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#diWCwlS .axis-tooltip-text-x {\n",
       "fill: #ffffff;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: Lucida Grande, sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#pNoYcNi .axis-title-y {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: Lucida Grande, sans-serif;\n",
       "font-size: 15.0px;\n",
       "\n",
       "}\n",
       "#pNoYcNi .axis-text-y {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: Lucida Grande, sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#diWCwlS .axis-tooltip-text-y {\n",
       "fill: #ffffff;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: Lucida Grande, sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#pNoYcNi .facet-strip-text-x {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: Lucida Grande, sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#pNoYcNi .facet-strip-text-y {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: Lucida Grande, sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#diWCwlS .tooltip-text {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: Lucida Grande, sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#diWCwlS .tooltip-title {\n",
       "fill: #474747;\n",
       "font-weight: bold;\n",
       "   font-style: normal;font-family: Lucida Grande, sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#diWCwlS .tooltip-label {\n",
       "fill: #474747;\n",
       "font-weight: bold;\n",
       "   font-style: normal;font-family: Lucida Grande, sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "\n",
       "  </style>\n",
       "  <g id=\"pNoYcNi\">\n",
       "    <path fill-rule=\"evenodd\" fill=\"rgb(255,255,255)\" fill-opacity=\"1.0\" d=\"M0.0 0.0 L0.0 400.0 L600.0 400.0 L600.0 0.0 Z\">\n",
       "    </path>\n",
       "    <g transform=\"translate(29.5 26.5 ) \">\n",
       "      <g>\n",
       "        <g transform=\"translate(50.97651758668602 0.0 ) \">\n",
       "          <g>\n",
       "            <line x1=\"32.375268307636325\" y1=\"0.0\" x2=\"32.375268307636325\" y2=\"241.13961002434917\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"82.18337339630759\" y1=\"0.0\" x2=\"82.18337339630759\" y2=\"241.13961002434917\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"131.99147848497887\" y1=\"0.0\" x2=\"131.99147848497887\" y2=\"241.13961002434917\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"181.79958357365015\" y1=\"0.0\" x2=\"181.79958357365015\" y2=\"241.13961002434917\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"231.6076886623214\" y1=\"0.0\" x2=\"231.6076886623214\" y2=\"241.13961002434917\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"281.41579375099263\" y1=\"0.0\" x2=\"281.41579375099263\" y2=\"241.13961002434917\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"331.22389883966395\" y1=\"0.0\" x2=\"331.22389883966395\" y2=\"241.13961002434917\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"381.0320039283352\" y1=\"0.0\" x2=\"381.0320039283352\" y2=\"241.13961002434917\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"430.84010901700645\" y1=\"0.0\" x2=\"430.84010901700645\" y2=\"241.13961002434917\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"480.6482141056777\" y1=\"0.0\" x2=\"480.6482141056777\" y2=\"241.13961002434917\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "          </g>\n",
       "        </g>\n",
       "        <g transform=\"translate(50.97651758668602 0.0 ) \">\n",
       "          <g>\n",
       "            <line x1=\"0.0\" y1=\"241.13961002434917\" x2=\"513.023482413314\" y2=\"241.13961002434917\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"0.0\" y1=\"182.85404800928364\" x2=\"513.023482413314\" y2=\"182.85404800928364\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"0.0\" y1=\"124.56848599421815\" x2=\"513.023482413314\" y2=\"124.56848599421815\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"0.0\" y1=\"66.28292397915266\" x2=\"513.023482413314\" y2=\"66.28292397915266\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"0.0\" y1=\"7.997361964087133\" x2=\"513.023482413314\" y2=\"7.997361964087133\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "          </g>\n",
       "        </g>\n",
       "      </g>\n",
       "      <g clip-path=\"url(#cMoiATn)\" clip-bounds-jfx=\"[rect (50.97651758668602, 0.0), (513.023482413314, 241.13961002434917)]\">\n",
       "        <g transform=\"translate(50.97651758668602 0.0 ) \">\n",
       "          <g>\n",
       "            <g>\n",
       "              <rect x=\"458.2345668157757\" y=\"227.0111897918973\" height=\"14.128420232451873\" width=\"44.827294579804175\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\" fill=\"rgb(17,142,216)\" fill-opacity=\"1.0\" stroke-width=\"1.6500000000000001\">\n",
       "              </rect>\n",
       "              <rect x=\"408.42646172710437\" y=\"225.82216432678996\" height=\"15.317445697559208\" width=\"44.82729457980412\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\" fill=\"rgb(17,142,216)\" fill-opacity=\"1.0\" stroke-width=\"1.6500000000000001\">\n",
       "              </rect>\n",
       "              <rect x=\"358.6183566384331\" y=\"224.6098246368766\" height=\"16.52978538747257\" width=\"44.827294579804175\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\" fill=\"rgb(17,142,216)\" fill-opacity=\"1.0\" stroke-width=\"1.6500000000000001\">\n",
       "              </rect>\n",
       "              <rect x=\"308.81025154976186\" y=\"207.9867823501799\" height=\"33.15282767416926\" width=\"44.82729457980412\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\" fill=\"rgb(17,142,216)\" fill-opacity=\"1.0\" stroke-width=\"1.6500000000000001\">\n",
       "              </rect>\n",
       "              <rect x=\"259.0021464610906\" y=\"205.824387999421\" height=\"35.315222024928175\" width=\"44.82729457980412\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\" fill=\"rgb(17,142,216)\" fill-opacity=\"1.0\" stroke-width=\"1.6500000000000001\">\n",
       "              </rect>\n",
       "              <rect x=\"209.19404137241932\" y=\"205.46884607112906\" height=\"35.6707639532201\" width=\"44.827294579804175\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\" fill=\"rgb(17,142,216)\" fill-opacity=\"1.0\" stroke-width=\"1.6500000000000001\">\n",
       "              </rect>\n",
       "              <rect x=\"159.38593628374807\" y=\"201.47628507309707\" height=\"39.66332495125209\" width=\"44.82729457980412\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\" fill=\"rgb(17,142,216)\" fill-opacity=\"1.0\" stroke-width=\"1.6500000000000001\">\n",
       "              </rect>\n",
       "              <rect x=\"109.57783119507678\" y=\"199.75103243745116\" height=\"41.38857758689801\" width=\"44.827294579804146\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\" fill=\"rgb(17,142,216)\" fill-opacity=\"1.0\" stroke-width=\"1.6500000000000001\">\n",
       "              </rect>\n",
       "              <rect x=\"59.76972610640553\" y=\"165.79969256367548\" height=\"75.33991746067369\" width=\"44.827294579804146\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\" fill=\"rgb(17,142,216)\" fill-opacity=\"1.0\" stroke-width=\"1.6500000000000001\">\n",
       "              </rect>\n",
       "              <rect x=\"9.961621017734252\" y=\"11.482838572588065\" height=\"229.6567714517611\" width=\"44.827294579804146\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\" fill=\"rgb(17,142,216)\" fill-opacity=\"1.0\" stroke-width=\"1.6500000000000001\">\n",
       "              </rect>\n",
       "            </g>\n",
       "          </g>\n",
       "        </g>\n",
       "        <defs>\n",
       "          <clipPath id=\"cMoiATn\">\n",
       "            <rect x=\"50.97651758668602\" y=\"0.0\" width=\"513.023482413314\" height=\"241.13961002434917\">\n",
       "            </rect>\n",
       "          </clipPath>\n",
       "        </defs>\n",
       "      </g>\n",
       "      <g>\n",
       "        <g transform=\"translate(50.97651758668602 241.13961002434917 ) \">\n",
       "          <g transform=\"translate(32.375268307636325 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 7.0 ) rotate(-30.0 ) \">\n",
       "              <text class=\"axis-text-x\" text-anchor=\"end\" dy=\"0.7em\">\n",
       "                <tspan>kotlin</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(82.18337339630759 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 7.0 ) rotate(-30.0 ) \">\n",
       "              <text class=\"axis-text-x\" text-anchor=\"end\" dy=\"0.7em\">\n",
       "                <tspan>intellij-community</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(131.99147848497887 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 7.0 ) rotate(-30.0 ) \">\n",
       "              <text class=\"axis-text-x\" text-anchor=\"end\" dy=\"0.7em\">\n",
       "                <tspan>kotlin-native</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(181.79958357365015 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 7.0 ) rotate(-30.0 ) \">\n",
       "              <text class=\"axis-text-x\" text-anchor=\"end\" dy=\"0.7em\">\n",
       "                <tspan>compose-jb</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(231.6076886623214 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 7.0 ) rotate(-30.0 ) \">\n",
       "              <text class=\"axis-text-x\" text-anchor=\"end\" dy=\"0.7em\">\n",
       "                <tspan>ideavim</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(281.41579375099263 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 7.0 ) rotate(-30.0 ) \">\n",
       "              <text class=\"axis-text-x\" text-anchor=\"end\" dy=\"0.7em\">\n",
       "                <tspan>JetBrainsMono</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(331.22389883966395 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 7.0 ) rotate(-30.0 ) \">\n",
       "              <text class=\"axis-text-x\" text-anchor=\"end\" dy=\"0.7em\">\n",
       "                <tspan>Exposed</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(381.0320039283352 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 7.0 ) rotate(-30.0 ) \">\n",
       "              <text class=\"axis-text-x\" text-anchor=\"end\" dy=\"0.7em\">\n",
       "                <tspan>ring-ui</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(430.84010901700645 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 7.0 ) rotate(-30.0 ) \">\n",
       "              <text class=\"axis-text-x\" text-anchor=\"end\" dy=\"0.7em\">\n",
       "                <tspan>kotlinconf-app</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(480.6482141056777 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 7.0 ) rotate(-30.0 ) \">\n",
       "              <text class=\"axis-text-x\" text-anchor=\"end\" dy=\"0.7em\">\n",
       "                <tspan>create-react-kotlin-app</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <line x1=\"0.0\" y1=\"0.0\" x2=\"513.023482413314\" y2=\"0.0\" stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\">\n",
       "          </line>\n",
       "        </g>\n",
       "        <g transform=\"translate(50.97651758668602 0.0 ) \">\n",
       "          <g transform=\"translate(0.0 241.13961002434917 ) \">\n",
       "            <g transform=\"translate(-3.0 0.0 ) \">\n",
       "              <text class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\">\n",
       "                <tspan>0</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(0.0 182.85404800928364 ) \">\n",
       "            <g transform=\"translate(-3.0 0.0 ) \">\n",
       "              <text class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\">\n",
       "                <tspan>10,000</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(0.0 124.56848599421815 ) \">\n",
       "            <g transform=\"translate(-3.0 0.0 ) \">\n",
       "              <text class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\">\n",
       "                <tspan>20,000</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(0.0 66.28292397915266 ) \">\n",
       "            <g transform=\"translate(-3.0 0.0 ) \">\n",
       "              <text class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\">\n",
       "                <tspan>30,000</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(0.0 7.997361964087133 ) \">\n",
       "            <g transform=\"translate(-3.0 0.0 ) \">\n",
       "              <text class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\">\n",
       "                <tspan>40,000</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "        </g>\n",
       "      </g>\n",
       "    </g>\n",
       "    <g transform=\"translate(80.47651758668601 16.8 ) \">\n",
       "      <text class=\"plot-title\" y=\"0.0\">\n",
       "        <tspan>Top 10 JetBrains repositories by stars count</tspan>\n",
       "      </text>\n",
       "    </g>\n",
       "    <g transform=\"translate(16.0 147.06980501217458 ) rotate(-90.0 ) \">\n",
       "      <text class=\"axis-title-y\" y=\"0.0\" text-anchor=\"middle\">\n",
       "        <tspan>starsCount</tspan>\n",
       "      </text>\n",
       "    </g>\n",
       "    <g transform=\"translate(336.988258793343 393.0 ) \">\n",
       "      <text class=\"axis-title-x\" y=\"0.0\" text-anchor=\"middle\">\n",
       "        <tspan>name</tspan>\n",
       "      </text>\n",
       "    </g>\n",
       "    <path fill=\"rgb(0,0,0)\" fill-opacity=\"0.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" stroke-width=\"0.0\" d=\"M0.0 0.0 L0.0 400.0 L600.0 400.0 L600.0 0.0 Z\" pointer-events=\"none\">\n",
       "    </path>\n",
       "  </g>\n",
       "  <g id=\"diWCwlS\">\n",
       "  </g>\n",
       "</svg>\n",
       "        <script>document.getElementById(\"5b15c3c0-3030-4983-b838-6f80bcee43b1\").style.display = \"none\";</script>"
      ],
      "application/plot+json": {
       "output_type": "lets_plot_spec",
       "output": {
        "ggtitle": {
         "text": "Top 10 JetBrains repositories by stars count"
        },
        "mapping": {},
        "data": {
         "starsCount": [
          39402.0,
          12926.0,
          7101.0,
          6805.0,
          6120.0,
          6059.0,
          5688.0,
          2836.0,
          2628.0,
          2424.0
         ],
         "name": [
          "kotlin",
          "intellij-community",
          "kotlin-native",
          "compose-jb",
          "ideavim",
          "JetBrainsMono",
          "Exposed",
          "ring-ui",
          "kotlinconf-app",
          "create-react-kotlin-app"
         ]
        },
        "kind": "plot",
        "scales": [
         {
          "aesthetic": "x",
          "discrete": true
         },
         {
          "aesthetic": "y",
          "limits": [
           null,
           null
          ]
         }
        ],
        "layers": [
         {
          "mapping": {
           "x": "name",
           "y": "starsCount"
          },
          "stat": "identity",
          "sampling": "none",
          "inherit_aes": false,
          "position": "dodge",
          "geom": "bar"
         }
        ],
        "data_meta": {
         "series_annotations": [
          {
           "type": "str",
           "column": "name"
          },
          {
           "type": "int",
           "column": "starsCount"
          }
         ]
        }
       },
       "apply_color_scheme": true,
       "swing_enabled": true
      }
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 16
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "## Write DataFrame"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "A `DataFrame` supports writing to all formats that it is capable of reading.\n",
    "\n",
    "Write into Excel:"
   ]
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-01T13:42:38.118495Z",
     "start_time": "2025-05-01T13:42:37.851592Z"
    }
   },
   "cell_type": "code",
   "source": "dfWithIsIntellij.writeExcel(\"jb_repos.xlsx\")",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2025-05-01T13:42:37.894239Z Execution of code 'dfWithIsIntellij.wri...' ERROR Log4j2 could not find a logging implementation. Please add log4j-core to the classpath. Using SimpleLogger to log to the console...\n"
     ]
    }
   ],
   "execution_count": 17
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Kotlin",
   "language": "kotlin",
   "name": "kotlin"
  },
  "language_info": {
   "name": "kotlin",
   "version": "1.9.23",
   "mimetype": "text/x-kotlin",
   "file_extension": ".kt",
   "pygments_lexer": "kotlin",
   "codemirror_mode": "text/x-kotlin",
   "nbconvert_exporter": ""
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
